Java 从Uri获取位图
我已经研究了一系列StackOverFlow问题,我已经尝试了所有这些问题,正如您在注释代码中看到的那样。我试图得到一个位图,它在拍照时是不变的。位图的像素位置对于我的目标至关重要。图像质量很高,可能是一个更大的文件。我的位图总是空的,我已经确定我的Uri不是空的。有什么想法吗 该文件的分辨率太大,无法生成位图。内存不足,无法构造位图,因此返回空值Java 从Uri获取位图,java,android,android-bitmap,Java,Android,Android Bitmap,我已经研究了一系列StackOverFlow问题,我已经尝试了所有这些问题,正如您在注释代码中看到的那样。我试图得到一个位图,它在拍照时是不变的。位图的像素位置对于我的目标至关重要。图像质量很高,可能是一个更大的文件。我的位图总是空的,我已经确定我的Uri不是空的。有什么想法吗 该文件的分辨率太大,无法生成位图。内存不足,无法构造位图,因此返回空值 尝试查看一个非常小的图像文件。如果位图来自您的移动存储,您可以从下面的代码直接从URI获取位图 protected void onCreate(Bu
尝试查看一个非常小的图像文件。如果位图来自您的移动存储,您可以从下面的代码直接从URI获取位图
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_image);
imageView = (ImageView) findViewById(R.id.imageView);
Intent intent = getIntent();
Uri imageUri = intent.getData();
// Picasso.with(this).load(imageUri).into(imageView);
if(imageUri == null){
Log.d(TAG, "Check");
}
//BitmapFactory.Options options = new BitmapFactory.Options();
// options.inSampleSize = 8;
// bm = MediaStore.Images.Media.getBitmap(getContentResolver(),imageUri);
Bitmap bm = null;
try{
InputStream image;
try{
image = getContentResolver().openInputStream(imageUri);
bm = BitmapFactory.decodeStream(image);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
catch (Exception e){
e.printStackTrace();
}
//BitmapFactory.Options options = new BitmapFactory.Options();
// bm = BitmapFactory.decodeFile(file.getAbsolutePath(),options);
if ((bm == null)) {
prints("It doesn't work");
}
//Log.d(TAG,"Going to convert image.");
imageView.setImageBitmap(bm);
如果文件太大而无法加载。。您需要压缩图像并显示。为此,还需要使用异步任务
我已经做了一个图像压缩任务,你可以使用它的大图像
public Bitmap getBitmapFromURI(Uri uri){
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getActivity().getContentResolver().query(uri, filePathColumn, null, null, null);
if(cursor!=null){
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
File f_image = new File(cursor.getString(columnIndex));
cursor.close();
BitmapFactory.Options o2 = new BitmapFactory.Options();
return BitmapFactory.decodeFile(f_image.getAbsolutePath(), o2);
}
return null;
}
希望这能帮到你。我想下面的代码会帮到你
ConvertBase64Task task = new ConvertBase64Task(File Object of Image);
task.setImageCompressiorListner(new ConvertBase64Task.ImageCompressiorListner() {
@Override
public void onImageCompressed(Bitmap bitmap) {
}
@Override
public void onError() {
}
});
task.execute();
将通用图像加载器用于
SimpleImage LoadingListener()
输入流图像代码>。请不要写不可读的代码。不要将输入流命名为图像。下面,我可以知道代码出了什么问题吗?
ConvertBase64Task task = new ConvertBase64Task(File Object of Image);
task.setImageCompressiorListner(new ConvertBase64Task.ImageCompressiorListner() {
@Override
public void onImageCompressed(Bitmap bitmap) {
}
@Override
public void onError() {
}
});
task.execute();
private void setImage(String path, CircleImageView img) {
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.considerExifParams(true)
.bitmapConfig(Bitmap.Config.RGB_565)
.showImageOnLoading(R.drawable.user)
.showImageForEmptyUri(R.drawable.user)
.showImageOnFail(R.drawable.user)
.build();
ImageLoader.getInstance().displayImage(path, img, options, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
super.onLoadingStarted(imageUri, view);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
super.onLoadingCancelled(imageUri, view);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
}
}, new ImageLoadingProgressListener() {
@Override
public void onProgressUpdate(String s, View view, int i, int i1) {
}
});
}