这是我正在使用的代码:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap imatgeOriginal = BitmapFactory.decodeFile(imageUrl, options);
Bitmap resizedbitmap = Bitmap.createScaledBitmap(imatgeOriginal, 1000, 1000, true);
正如您所看到的,我使用选项调整图像大小,但无论如何它只是在最后一行崩溃,抛出NullPointerException。因此imatgeOriginal
是null
为什么会这样?
一些注意事项:
logcat输出:
08-22 15:11:13.249: E/AndroidRuntime(5404): FATAL EXCEPTION: main
08-22 15:11:13.249: E/AndroidRuntime(5404):
java.lang.NullPointerException 08-22 15:11:13.249:
E/AndroidRuntime(5404): at
android.graphics.Bitmap.createScaledBitmap(Bitmap.java:432) 08-22
15:11:13.249: E/AndroidRuntime(5404): at
myclass.onAnimationEnd(productView.java:2126) 08-22 15:11:13.249:
E/AndroidRuntime(5404): at
android.view.animation.AnimationSet.getTransformation(AnimationSet.java:397)
编辑:
发生了一些奇怪的事情,文件图像存在,路线正确。但是,android会将此图像检测为CORRUPT,或者至少无法使用任何可用工具打开它(默认图库,文件浏览器,没有我的应用)。 但是,如果我将图像下载到计算机,图像将完美显示。此应用程序也在iOS中运行,同样的图像实际上在那里可见,并且看起来没有损坏。
所以我猜Android中加载JPEG文件有一些限制。
你们有类似这样的问题吗?
我找到的一些资源: http://code.google.com/p/skia/issues/detail?id=69#c2 Unable to load JPEG-image with BitmapFactory.decodeFile. Returns null
答案 0 :(得分:0)
您可以压缩位图大小Bitmap.compress()
尝试这种方法它会缩小尺寸,这可能会帮助你加载它,因为对于某些手机来说2MB是巨大的
int MAX_IMAGE_SIZE = 200 * 1024; // max final file size
Bitmap bmpPic = BitmapFactory.decodeFile(fileUri.getPath());
if ((bmpPic.getWidth() >= 1024) && (bmpPic.getHeight() >= 1024)) {
BitmapFactory.Options bmpOptions = new BitmapFactory.Options();
bmpOptions.inSampleSize = 1;
while ((bmpPic.getWidth() >= 1024) && (bmpPic.getHeight() >= 1024)) {
bmpOptions.inSampleSize++;
bmpPic = BitmapFactory.decodeFile(fileUri.getPath(), bmpOptions);
}
Log.d(TAG, "Resize: " + bmpOptions.inSampleSize);
}
int compressQuality = 104; // quality decreasing by 5 every loop. (start from 99)
int streamLength = MAX_IMAGE_SIZE;
while (streamLength >= MAX_IMAGE_SIZE) {
ByteArrayOutputStream bmpStream = new ByteArrayOutputStream();
compressQuality -= 5;
Log.d(TAG, "Quality: " + compressQuality);
bmpPic.compress(Bitmap.CompressFormat.JPEG, compressQuality, bmpStream);
byte[] bmpPicByteArray = bmpStream.toByteArray();
streamLength = bmpPicByteArray.length;
Log.d(TAG, "Size: " + streamLength);
}
try {
FileOutputStream bmpFile = new FileOutputStream(finalPath);
bmpPic.compress(Bitmap.CompressFormat.JPEG, compressQuality, bmpFile);
bmpFile.flush();
bmpFile.close();
} catch (Exception e) {
Log.e(TAG, "Error on saving file");
}
答案 1 :(得分:0)
我发现了正在发生的事情。
Android和JPEG& amp存在问题CMYK图片。
你可以阅读更多: http://code.google.com/p/skia/issues/detail?id=69#c2
Unable to load JPEG-image with BitmapFactory.decodeFile. Returns null
此错误自2.0以来就已知,目前尚无解决方法。您所能做的就是确保不会下载任何具有上述两个属性的图像。