从随机字节[]创建png / jpg

时间:2015-04-18 01:12:18

标签: java android

我想知道是否可以创建一个可以解码为Bitmap的字节数组。

例如,假设我有一个包含100个元素的字节数组。我可以以某种方式将其转换为图像吗?我读到了关于png的标题和其他内容,以及jpges的标记,但我仍然很无能......

一次可能需要4个字节并创建像素?

1 个答案:

答案 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