哦,我的第一个问题~
这是我的问题。我正在制作一个应用程序来拍照并添加水印。
第一步,当应用程序启动时,我拍了一张(使用最大的分辨率,如2592*1952(5M))。拍照后,我按确定返回我的应用程序视图,应用程序崩溃。
但是,如果我在应用程序启动时以不太大的分辨率(如 3M、2M、1M)拍摄照片,它可以正常工作。然后,第二张照片,分辨率为 5M,无论哪种方式都很有趣。我很困惑。有人能帮帮我吗?这是一些关于解码图像文件的代码。
public void onClick(View v){
Bitmap bitmap1 =mcreateBitmap(bitmaptmp, "watermark");
// bitmaptmp=null;
/* Associate the Bitmap to the ImageView */
if (bitmap1 != null) {
mImageView.setImageBitmap(bitmap1);
}
mImageView.setVisibility(View.VISIBLE);
// try {
// String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
// String imageFileName = JPEG_FILE_PREFIX + timeStamp;
// saveMyBitmap(imageFileName,bitmap1);
// bitmap1=null;
// } catch (IOException e) {
// e.printStackTrace();
// }
}
公共位图 mcreateBitmap(位图 src,字符串 str){
Time t = new Time();
t.setToNow();
int w = src.getWidth();
int h = src.getHeight();
String mstrTitle = "11:"+t.hour + ":" + t.minute + ":" + t.second;
String xx="34:"+x;
String yy="44:"+y;
Bitmap bmpTemp = Bitmap.createBitmap(w, h, Config.ARGB_8888);
Canvas canvas = new Canvas(bmpTemp);
Paint photoPaint = new Paint();
photoPaint.setDither(true);
photoPaint.setFilterBitmap(true);
Rect s = new Rect(0, 0, src.getWidth(), src.getHeight());
Rect d = new Rect(0, 0, w, h);
canvas.drawBitmap(src, s, d, photoPaint);
String familyName = "new";
Typeface font = Typeface.create(familyName, Typeface.BOLD);
photoPaint.setColor(Color.BLUE);
photoPaint.setTypeface(font);
photoPaint.setTextSize(18);
canvas.drawText(mstrTitle,40, 20, photoPaint);
canvas.drawText(xx,40, 40, photoPaint);
canvas.drawText(yy,40, 60, photoPaint);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
return bmpTemp;
}
这是logCat:
01-05 11:25:25.791: E/dalvikvm-heap(11147): 20238336 字节的外部分配对于这个进程来说太大了。01-05 11:25:25.791:E/dalvikvm(11147):内存不足:堆大小=2923KB,分配=2460KB,位图大小=1235KB,限制=13756KB 01-05 11:25:25.791:E/dalvikvm( 11147):修剪信息:占用空间=2883KB,允许占用空间=3267KB,修剪=344KB 01-05 11:25:25.791:E/GraphicsJNI(11147):VM 不允许我们分配 20238336 字节 01-05 11:25: 25.801: D/AndroidRuntime(11147): 关闭 VM 01-05 11:25:25.801: W/dalvikvm(11147): threadid=1: 线程退出未捕获异常 (group=0x40028a00) 01-05 11:25:25.801 : E/AndroidRuntime(11147): 致命异常: main 01-05 11:25:25.801: E/AndroidRuntime(11147): java.lang.OutOfMemoryError: 位图大小超过 VM 预算 01-05 11:25:25.801: E/ AndroidRuntime(11147):在 android.graphics.Bitmap。