2014-09-04 35 views
1

我在寫一個簡單的相機應用程序,它可以讓用戶拍照,應用程序會將一些信息寫入圖像。如何在巨大的位圖上書寫文字

由於圖像可能很大,所以出現內存不足錯誤。取決於相機硬件。

這是我如何寫作文到圖像:

public static byte[] writeTextOnImage(byte[] imgData, String text) { 
    Bitmap bitmap = BitmapFactory.decodeByteArray(imgData, 0, imgData.length); 
    Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.RGB_565, true); 

    Canvas canvas = new Canvas(mutableBitmap); 
    Paint paint = new Paint(); 

    int dist = 30; 
    Rect areaRect = new Rect(dist, mutableBitmap.getHeight() - dist, 170, (int) (mutableBitmap.getHeight() - dist * 1.6f)); 

    paint.setColor(Color.BLACK); 
    canvas.drawRect(areaRect, paint); 

    RectF bounds = new RectF(areaRect); 
    bounds.right = paint.measureText(text, 0, text.length()); 
    bounds.bottom = paint.descent() - paint.ascent(); 

    bounds.left += (areaRect.width() - bounds.right)/2.0f; 
    bounds.top += (areaRect.height() - bounds.bottom)/2.0f; 

    paint.setColor(Color.WHITE); 
    canvas.drawText(text, bounds.left, bounds.top - paint.ascent(), paint); 

    ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
    mutableBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream); 
    return stream.toByteArray(); 
} 

我想我不應該別想加載整個圖像,但我還是必須以某種方式寫在上面。是否可以編輯一個圖像文件而不將其全部加載到內存中?

+0

您是否必須在圖像上書寫文字或者是否有其他解決方案? – 2014-09-04 13:56:16

+0

我想你想擁有一種標籤或水印......是嗎? – echoashu 2014-09-04 14:00:11

+0

是的。它必須在圖像上。 exif數據也在那裏。 – Tamas 2014-09-04 14:09:48

回答

0

您可以在NDK中操作圖像。本地代碼可用的內存僅受設備RAM的限制。缺點是你必須用本地代碼解碼圖像。

+0

聽起來像一個巨大的努力。我不知道C. – Tamas 2014-09-04 15:22:12