ああ、私の最初の質問です~
ここに私の問題があります。写真を撮って透かしを追加するアプリケーションを作成しています。
最初のステップでは、アプリケーションが起動したら、写真を撮ります (2592*1952(5M) などの最大の解像度を使用します)。写真を撮った後、[OK] を押してアプリケーションのビューに戻ると、アプリケーションがクラッシュします。
でも、アプリ起動時にそこまで大きくない解像度(3M、2M、1Mとか)で撮ってみたら問題なく撮れました。困惑しています。誰か助けてくれませんか?画像ファイルのデコードに関するコードを次に示します。
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): FATAL EXCEPTION: 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.