我正在寫一個自定義打印應用程序在Android中,我正在尋找方法來節省內存。我有三個基本的矩形需要在整頁上打印。目前我正在創建基本Bitmap
頁面大小:動態創建一個壓縮位圖
_baseBitmap = Bitmap.createBitmap(width/_scale, height/_scale, Bitmap.Config.ARGB_8888);
打印進程請求頁面的Rect
部分。我無法預先確定這個Rect的尺寸。
newBitmap = Bitmap.createBitmap(fullPageBitmap, rect.left/_scale, rect.top/_scale, rect.width()/_scale, rect.height()/_scale);
return Bitmap.createScaledBitmap(newBitmap, rect.width(), rect.height(), true);
使用位圖的配置ARGB_8888 _baseBitmap
是大約28MB(8.5 「X11」 @ 300dpi的= 2250 * 3300 * 4字節)。即使在50%縮放比例(以上使用)下,我的圖片也超過了7MB。縮小比這更小的圖像質量太差。
我試圖創建_baseBitmap
使用Bitmap.Config.RGB_565
,這大大減少了整個圖像的大小,但是當我覆蓋圖像(jpegs)時,我得到了有趣的結果。圖像的寬度被壓縮,緊挨着它自己,所有的顏色都是綠色的。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inDither = true;
options.inPreferredConfig = Bitmap.Config.RGB_565;
Bitmap myBitmap = BitmapFactory.decodeStream(input, null, options);
input.close();
return myBitmap;
....
private static Bitmap overlay(Bitmap bmp1, Bitmap bmp2, float left, float top) {
Canvas canvas = new Canvas(bmp1);
canvas.drawBitmap(bmp2, left, top, null);
return bmp1;
}
我知道我可以將這些尺寸的圖像壓縮到合理的尺寸。我看着Bitmap.compress
,但由於某種原因,我無法理解我得到相同尺寸的圖像回:
ByteArrayOutputStream os = new ByteArrayOutputStream();
_baseBitmap.compress(Bitmap.CompressFormat.JPEG, 3, os);
byte[] array = os.toByteArray();
Bitmap newBitmap = BitmapFactory.decodeByteArray(array, 0, array.length);
_baseBitmap.getAllocationByteCount()
== newBitmap.getAllocationByteCount()
這將是更好地創建它的壓縮比,以創建一個大的,然後壓縮它。有沒有辦法以創建一個壓縮的位圖?任何意見是極大的讚賞。
注意:不是Android專家。我不一定熟悉您可能用於回覆的平臺特定條款。請溫柔。
'compress'中的第二個參數的質量範圍爲1-100。我不確定你爲什麼使用3.'compress'不會改變圖像的分辨率,只是壓縮大小。 – ashishduh
3 - 高壓縮的隨機低值,不是? – earthling