我有一个对应于“灰度位图”(一个字节->一个像素)的字节数组,我需要为此图像创建一个 PNG 文件。
下面的方法有效,但是创建的 png 非常大,因为我使用的位图是 ARGB_8888 位图,每个像素占用 4 个字节而不是 1 个字节。
我无法使其与不同于 ARGB_8888 的其他 Bitmap.Config 一起使用。也许 ALPHA_8 是我需要的,但我无法让它工作。
我还尝试了其他一些帖子中包含的 toGrayScale 方法(在 Android 中将位图转换为灰度),但我对大小有同样的问题。
public static boolean createPNGFromGrayScaledBytes(ByteBuffer grayBytes, int width,
int height,File pngFile) throws IOException{
if (grayBytes.remaining()!=width*height){
Logger.error(Tag, "Unexpected error: size mismatch [remaining:"+grayBytes.remaining()+"][width:"+width+"][height:"+height+"]", null);
return false;
}
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// for each byte, I set it in three color channels.
int gray,color;
int x=0,y=0;
while(grayBytes.remaining()>0){
gray = grayBytes.get();
// integer may be negative as byte is signed. make them positive.
if (gray<0){gray+=256;}
// for each byte, I set it in three color channels.
color= Color.argb(-1, gray, gray, gray);
bitmap.setPixel(x, y, color);
x++;
if (x==width){
x=0;
y++;
}
}
FileOutputStream fos=null;
fos = new FileOutputStream(pngFile);
boolean result= bitmap.compress(Bitmap.CompressFormat.PNG,100,fos);
fos.close();
return result;
}
编辑:链接到生成的文件(它可能看起来很废话,但只是用随机数据创建的)。 http://www.tempfiles.net/download/201208/256402/huge_png.html
任何帮助将不胜感激。