【发布时间】:2013-01-02 14:39:25
【问题描述】:
哦,我的第一个问题~
这是我的问题。我正在制作一个应用程序来拍照并添加水印。
第一步,当应用程序启动时,我拍了一张(使用最大分辨率,如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();
// }
}
public Bitmap mcreateBitmap(Bitmap src, String 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):致命异常:主要
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.nativeCreate(Native Method)
01-05 11:25:25.801: E/AndroidRuntime(11147): 在 android.graphics.Bitmap.createBitmap(Bitmap.java:574)
01-05 11:25:25.801: E/AndroidRuntime(11147): at com.kevin.photowatermark.PhotowatermarkActivity.mcreateBitmap(PhotowatermarkActivity.java:403)
【问题讨论】:
-
欢迎来到 StackOverlow!您能否提供有关崩溃的更多信息?就像 logcat 堆栈跟踪一样。
-
我希望如此。但正如您所知,在模拟器中,您无法使用相机。所以,我使用的唯一方法是将应用程序安装在真实设备中。
-
使用 Eclipse 调试器和 USB 数据线运行应用程序,您还可以获得 logcat 反馈!
-
非常感谢,我马上调试应用程序!
标签: android