【发布时间】:2022-02-03 16:35:44
【问题描述】:
我正在尝试在 Android Studio 中制作图像处理程序,但我遇到了关于如何保存位图的问题。
我的问题是关于保存来自 ByteBuffer 的图像。
为了在此处显示,我这样做了:我将图像加载到 ByteBuffer 中并尝试将其保存,重新缩放为 1014x1163 像素。而且我得到的图像是扭曲的、凌乱的。
例如,这是我加载的图像:
这是我保存的图像中的内容:
这是我的代码:
imageSize = (int) (bmWidth*bmHeight*4);
ByteBuffer pixelsArray = ByteBuffer.allocateDirect(imageSize);
ByteBuffer outputArray = ByteBuffer.allocateDirect(imageSize);
workingBitmap.copyPixelsToBuffer(pixelsArray);
workingBitmap.copyPixelsToBuffer(outputArray);
int thiswidth = workingBitmap.getWidth();
int thisheight = workingBitmap.getHeight();
Bitmap copiedBitmap = Bitmap.createScaledBitmap(workingBitmap, Width, Height, false);
int thiswidth2 = copiedBitmap.getWidth();
int thisheight2 = copiedBitmap.getHeight();
outputArray.rewind();
copiedBitmap.copyPixelsFromBuffer(outputArray);
SaveJPG(copiedBitmap);
函数 SaveJPG 工作正常,因为如果我调用 SaveJPG(workingBitmap) 它会保存一个普通图像。
这是调试过程中带有变量值的代码:
我想知道问题是否来自输出分辨率不是 4 的倍数。这在我的程序中是强制性的:输出图像分辨率可以是任何值(奇数或偶数)。
我尝试了很多不同的方法(例如复制 workingBitmap 和调整副本大小)。
没有成功。我不知道问题的原因是什么。
有没有人有一些源代码可以保存任何分辨率的图像,存储在 ByteBuffer 中?
提前致谢。
【问题讨论】:
-
即使
SaveJPG在一张图片上工作得很好,但这并不意味着它在所有图片上都能正常工作。 -
如果图像存储在字节缓冲区中,那么只需将该缓冲区的内容保存到磁盘。
标签: java android save jpeg bytebuffer