我需要以图库形式全屏显示原始图像。对于拇指,它将完美地工作,当我尝试使用原始源以全屏显示该图像时,它将无法显示。在大多数情况下,如果图像分辨率大于2000,那么它将显示错误位图太大而无法上传到纹理android 。
我想阻止这一点,我搜索谷歌但没有得到任何答案。
答案 0 :(得分:17)
我遇到了同样的问题,并提出了针对此问题的单线解决方案here:
Picasso.with(context).load(new File(path/to/File)).fit().centerCrop().into(imageView);
答案 1 :(得分:8)
我刚刚创建了一个if else函数来检查图像是否大于1M像素,这里是示例代码:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (requestCode == SELECT_PICTURE) {
Uri selectedImageUri = data.getData();
selectedImagePath = getPath(selectedImageUri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap bitmap = BitmapFactory.decodeFile(selectedImagePath);
int height = bitmap.getHeight(), width = bitmap.getWidth();
if (height > 1280 && width > 960){
Bitmap imgbitmap = BitmapFactory.decodeFile(selectedImagePath, options);
imageView.setImageBitmap(imgbitmap);
System.out.println("Need to resize");
}else {
imageView.setImageBitmap(bitmap);
System.out.println("WORKS");
}
答案 2 :(得分:4)
看一下ImageResizer类。 ImageResizer.decodeSampledBitmapFrom *使用此方法获取缩小图像。
答案 3 :(得分:3)
这是我用来纠正在4096x4096分辨率的图像视图中拟合尺寸为3120x4196分辨率的图像的问题的代码。这里ImageViewId是在主布局中创建的图像视图的id,ImageFileLocation是要调整大小的图像的路径。
ImageView imageView=(ImageView)findViewById(R.id.ImageViewId);
Bitmap d=BitmapFactory.decodeFile(ImageFileLcation);
int newHeight = (int) ( d.getHeight() * (512.0 / d.getWidth()) );
Bitmap putImage = Bitmap.createScaledBitmap(d, 512, newHeight, true);
imageView.setImageBitmap(putImage);
答案 4 :(得分:1)
您不需要加载整个图片,因为它太大而且您的手机可能无法显示完整的位图像素。 您需要先根据设备屏幕大小进行缩放。 这是我发现的最好的方法,它的效果非常好: Android: Resize a large bitmap file to scaled output file
答案 5 :(得分:1)
我找到了一种方法,而不使用任何外部库:
if (bitmap.getHeight() > GL10.GL_MAX_TEXTURE_SIZE) {
// this is the case when the bitmap fails to load
float aspect_ratio = ((float)bitmap.getHeight())/((float)bitmap.getWidth());
Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0,
(int) ((GL10.GL_MAX_TEXTURE_SIZE*0.9)*aspect_ratio),
(int) (GL10.GL_MAX_TEXTURE_SIZE*0.9));
imageView.setImageBitmap(scaledBitmap);
}
else{
// for bitmaps with dimensions that lie within the limits, load the image normally
if (Build.VERSION.SDK_INT >= 16) {
BitmapDrawable ob = new BitmapDrawable(getResources(), bitmap);
imageView.setBackground(ob);
} else {
imageView.setImageBitmap(bitmap);
}
}
基本上,最大图像尺寸是系统强加的限制。上述方法将正确调整超出此限制的位图。但是,只会加载整个图像的一部分。要更改显示的区域,您可以更改x
方法的y
和createBitmap()
参数。
此方法可处理任何大小的位图,包括使用专业相机拍摄的照片。
<强>参考文献:强>