【发布时间】:2014-01-29 14:26:30
【问题描述】:
我想将公司的商业徽标添加到 Android 中的 jpeg 文件 [照片]。 试了好几次,把照片转成位图再添加logo,结果OutOfMemoryError。
编辑: 它现在可以工作,但是需要很多时间和内存...... 我的代码是:
Bitmap logo = BitmapFactory.decodeResource(
mainActivity.getResources(), R.drawable.logo);
Bitmap photo =BitmapFactory.decodeByteArray(jpeg[0], 0, jpeg[0].length);
Bitmap combination = Bitmap.createBitmap(photo.getWidth(), photo.getHeight(), Bitmap.Config.RGB_565);
Canvas comboImage = new Canvas(combination);
comboImage.drawBitmap(photo, 0f, 0f, null);
comboImage.drawBitmap(logo, 0f, 200, null);
try {
FileOutputStream out = new FileOutputStream(mediaFile);
combination.compress(Bitmap.CompressFormat.PNG, 100, out);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
Logcat 的输出:
01-29 15:40:44.154: I/dalvikvm-heap(5065): Grow heap (frag case) to 109.067MB for 25560592-byte allocation
01-29 15:40:44.184: I/Choreographer(5065): Skipped 36 frames! The application may be doing too much work on its main thread.
你有什么建议?
非常感谢。卢卡斯
【问题讨论】:
-
发布一些代码和错误堆栈
-
所涉及的图像大小是多少?可能您正在尝试加载不适合您设备内存的图像。加载 jpeg 图像时,它会创建一个比原始 jpeg 更大(以字节为单位)的位图。尝试做同样的事情,但使用更小的图像。
-
@Christian:是的,较小的图像效果更好。但是这些图像只是在这个应用程序中使用相机创建的,我不想缩小这些图像。这就是为什么我正在使用方式搜索更好/更快/更少的内存。
-
我认为你应该使用一些没有 16Mb 限制的 Android NDK。
标签: android bitmap out-of-memory jpeg