我得到的錯誤是我的緩衝區對像素來說不夠大。任何建議?位圖b應該與gSaveBitmap大小相同,我試圖將其像素放入。緩衝區對於像素來說不夠大
if(gBuffer == null)
{
Bitmap b = Bitmap.createScaledBitmap(gBitmap, mWidth, mHeight, false);
//gBuffer = ByteBuffer.allocateDirect(b.getRowBytes()*b.getHeight()*4);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 100, stream);
gBuffer = ByteBuffer.wrap(stream.toByteArray());
b.recycle();
}
gSaveBitmap.copyPixelsFromBuffer(gBuffer);
更新:下面的代碼給出了完全相同的錯誤,沒有涉及任何壓縮。
if(gBuffer == null)
{
Bitmap b = Bitmap.createScaledBitmap(gBitmap, mWidth, mHeight, false);
int bytes = b.getWidth()*b.getHeight()*4;
gBuffer = ByteBuffer.allocate(bytes);
b.copyPixelsToBuffer(gBuffer);
b.recycle();
}
gSaveBitmap.copyPixelsFromBuffer(gBuffer);
更新:通過加倍gBuffer的大小解決了這個問題。也許有人可以告訴我爲什麼這是正確的大小。另外...圖片旋轉錯誤,需要旋轉90度。任何想法如何在gBuffer中重新排列數據?
gBuffer = ByteBuffer.allocate(b.getRowBytes()*b.getHeight()*2);
png格式有4個通道(RGBA)通常,你可能會想東西的數據爲3通道位(RGB),這將使這個錯誤 –
斯爾詹,不會JPEG CompressFormat修復程序問題,因爲它的24位RGB值? – lostdev
其實,如果你只是複製一張圖片,爲什麼不使用像gSaveBitmap = b.copy(Bitmap.Config.ARGB_8888,true)之類的東西,而不是使用緩衝區/流? –