我想知道是否可以创建一个可以解码为Bitmap的字节数组。
例如,假设我有一个包含100个元素的字节数组。我可以以某种方式将其转换为图像吗?我读到了关于png的标题和其他内容,以及jpges的标记,但我仍然很无能......
一次可能需要4个字节并创建像素?
答案 0 :(得分:0)
您的问题:“从随机字节[]创建png / jpg”;字面上可能虽然不是直接的:
您必须先使用自己的逻辑从Bitmap
创建Object
byte[]
。但与byte[]
一起,您还需要使用位图宽度,高度和每像素字节数({{1}预定义的。您还必须确保byte []的大小与预定义值匹配或接受位图中的空格,即:
Bitmap.Config
...所以 100 字节可以为您提供 5 X 5 像素位图,每像素4个字节。然后,您创建一个byte[] b = new byte[width*height*bytesPerPixel];
Bitmap
:
Object
...其中&lt; whatever&gt; 将取决于每像素字节数。每像素4个字节的示例为Bitmap bitmap = Bitmap.create(width, height, Bitmap.Config.<whatever>)
。
然后使用两个ARGB_8888
循环遍历bitmap
中的每个像素,并从for
拉出bytesPerPixel
(现在假定为4)字节数,生成像素颜色并将像素绘制到它:
b
现在您的// Create a Canvas Object;
Canvas c = new Canvas(bitmap);
// Value to index the byte[];
int bI = 0;
// Paint Object for drawing the pixel;
Paint p = new Paint();
// Iterate through the pixel rows;
for(int i = 0; i < height; i++) {
// Iterate through the pixels in the row;
for(int j = 0; j < width; j++) {
// Pull out 4 bytes and generate colour int;
// This entire statement depends on bytesPerPixel;
int colorInt = Color.argb(b[bI++], b[bI++], b[bI++], b[bI++]);
// Set the colour on the Paint;
p.setColor(colorInt);
// Draw the pixel;
c.drawPoint(j, i, p);
}
}
将出现在内存中,以便将其保存到文件中:
Bitmap