1

ああ、私の最初の質問です~
ここに私の問題があります。写真を撮って透かしを追加するアプリケーションを作成しています。
最初のステップでは、アプリケーションが起動したら、写真を撮ります (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.

4

2 に答える 2