【发布时间】:2014-06-03 12:54:48
【问题描述】:
我的应用程序正在尝试从矩形外部存储调整 PNG 文件的大小:(例如 1000 w x 2000 h)
我们的目标是将其变成 256 x 256 的图像,方法是在图像的两侧添加空白区域,使其现在为 2000 x 2000,然后将其缩小到 256x256,从而使其成为正方形而不拉伸原始图像.
我认为我可以很聪明并使用ImageView 来执行此操作并添加缩放到屏幕的图像预览,但我因空指针而崩溃......
我的调整大小方法
private void resizeImage(String fileName){
ImageView tempImageView = new ImageView(this);
tempImageView.setDrawingCacheEnabled(true);
tempImageView.setLayoutParams(new LayoutParams(256, 256));
tempImageView.setScaleType(ScaleType.CENTER_INSIDE);
Bitmap bm = BitmapFactory.decodeFile(getKingNozzleStorageDirectory()+fileName);
tempImageView.setImageBitmap(bm);
rootView.addView(tempImageView);
tempImageView.buildDrawingCache();
Bitmap resized_bm = tempImageView.getDrawingCache();
FileOutputStream outStream;
try {
outStream = new FileOutputStream(getKingNozzleStorageDirectory() + "new"+fileName );
try {
resized_bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我遇到的异常:
06-03 08:43:50.006: W/System.err(3842): java.lang.NullPointerException 06-03 08:43:50.006: W/System.err(3842): 在 com.eliddell.kingnozzle.activities.KNDrawingActivity.resizeImage(KNDrawingActivity.java:285) 06-03 08:43:50.006: W/System.err(3842): 在 com.eliddell.kingnozzle.activities.KNDrawingActivity.onClick(KNDrawingActivity.java:223) 06-03 08:43:50.006: W/System.err(3842): 在 android.view.View.performClick(View.java:4438) 06-03 08:43:50.006: W / System.err(3842):在 android.view.View$PerformClick.run(View.java:18422) 06-03 08:43:50.006:W/System.err(3842):在 android.os.Handler.handleCallback(Handler.java:733) 06-03 08:43:50.006:W/System.err(3842):在 android.os.Handler.dispatchMessage(Handler.java:95) 06-03 08:43:50.006:W/System.err(3842):在 android.os.Looper.loop(Looper.java:136) 06-03 08:43:50.006: W / System.err(3842):在 android.app.ActivityThread.main(ActivityThread.java:5017) 06-03 08:43:50.006:W/System.err(3842):在 java.lang.reflect.Method.invokeNative(Native Method) 06-03 08:43:50.006:W/System.err(3842):在 java.lang.reflect.Method.invoke(Method.java:515) 06-03 08:43:50.006: W / System.err(3842):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 06-03 08:43:50.006: W/System.err(3842): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 06-03 08:43:50.006:W/System.err(3842):在 dalvik.system.NativeStart.main(Native Method)
如果我注释掉以下行
resized_bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
它没有崩溃,这让我相信 resize_bm 没有被创建?
Bitmap resized_bm = tempImageView.getDrawingCache();
显然,可能还有其他方法可以实现我的画布调整大小,所以当然欢迎这些见解.. 但是有人知道我做错了什么吗?
我没有看到任何将画布填充添加到位图宽度的本地方法..
【问题讨论】:
标签: android android-file android-bitmap