gpt4 book ai didi

android - 如何从文件管理器中获取位图?

转载 作者:行者123 更新时间:2023-11-29 01:21:56 25 4
gpt4 key购买 nike

我要在我的 Android 应用程序中创建附件。我需要附上图片。这是我的代码:

...
attachButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(Intent.createChooser(intent, "Select image"), CHOOSE_IMAGE);
}
});
...


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == CHOOSE_IMAGE) {
if(resultCode == RESULT_OK) {
Uri uri = data.getData();
ImageView imageView = new ImageView(this);

Bitmap bitmap = getDecodedImageFromUri(uri);
imageView.setImageBitmap(bitmap);
}
}
}

private Bitmap getDecodedImageFromUri(Uri uri) {
InputStream inputStream = null;
try {
inputStream = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Rect rect = new Rect(0, 0, 0, 0);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;

BitmapFactory.decodeStream(inputStream, rect, options);
options.inSampleSize = getInSampleSize(options, 128, 128);

options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, rect, options); //HERE IS PROBLEM - bitmap = null.
return bitmap;
}

private int getInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
int width = options.outWidth;
int height = options.outHeight;
int inSampleSize = 1;

if(height > reqHeight || width > reqWidth) {
int halfHeight = height / 2;
int halfWidth = width / 2;

while ((halfHeight / inSampleSize) > reqHeight &&
(halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}

return inSampleSize;
}

我在有问题的地方添加评论。所以,我做了调试,在这一刻:

 Bitmap bitmap = BitmapFactory.decodeStream(inputStream, rect, options);

位图等于空。

有什么问题?我做错了什么?

如您所见,这些辅助方法来自 android 开发人员指南。

已更新

我需要解码两次,因为我需要获取选项,然后获取图像大小来计算 InSampleSize 以压缩此图像。

第二次,选项不等于 null - 我通过调试检查了它。

但是,在第二次解码后,选项的 outWidth 和 outHeight 为 -1。所以,它设置为默认值。我不知道这一刻会发生什么。

最佳答案

我猜你的问题可能是因为两次调用decodeStream

BitmapFactory.decodeStream(inputStream, rect, options); //HERE
options.inSampleSize = getInSampleSize(options, 128, 128);

options.inJustDecodeBounds = false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, rect, options); //HERE AGAIN
return bitmap;

关于android - 如何从文件管理器中获取位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com