gpt4 book ai didi

java - Android解析base64Binary pgm到Bitmap

转载 作者:行者123 更新时间:2023-12-02 05:23:31 30 4
gpt4 key购买 nike

我需要将 pgm 格式的 base64Binary 字符串转换为 android 中的位图。所以我没有通常的 base64 编码位图。base64binary-string 来自 xml 文件

<ReferenceImage Type="base64Binary" Format="pgm" WidthPX="309" HeightPX="233" BytesPerPixel="1" >
NDY4Ojo9QEFDRUVHRklLTE9OUFFTU1VWV1hZWltZWVlZWlpbW1xdXmBgYmJjZGNlZWRkZGRlZmZnZ2ZnaWpqa21ub29ubm9vb3BwcHBxcHFyc3FzcnJzcnJydH[...]VlaW1xbWltcXFxcXFxd
.

Pattern.compile("<ReferenceImage .*>((?s).*)<\\/ReferenceImage>");
...
String sub = r; //base64binary string pattern-matched from xml file
byte[] decodedString = Base64.decode(sub.getBytes(), Base64.NO_WRAP); //probably wrong decoding (needs to be ASCII to binary?)
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); //always null due to wrong byte-array

我想我明白 pgm 图像通常存储为 ASCII(就像在我的 xml 中)或二进制(0..255)。我也认为Base64.decode需要二进制变体,而不是我拥有的 ASCII。然而BitmapFactory.decodeByteArray不理解解码后的字节数组并返回 null。

那么如何将我的 base64binary-pgm-ASCII-string 转换为有效的字节数组以创建有效的位图?

最佳答案

我认为你的 Base64 解码没问题。但Android的BitmapFactory可能没有直接支持PGM格式。我不确定如何添加对它的支持,但似乎您可以使用 createBitmap(...) 工厂方法之一轻松创建 Bitmap

参见PGM spec有关如何解析 header 的详细信息,或参见 my implementation for Java SE (如果您环顾四周,您还会发现一个支持 ASCII 读取的类(如果需要)。

也可能没有 header ,并且您可以从 XML 中获取高度/宽度。在这种情况下,dataOffset 将是下面的 0

解析 header 后,您就知道宽度、高度以及图像数据的开始位置:

int width, height; // from header
int dataOffset; // == end of header

// Create pixel array, and expand 8 bit gray to ARGB_8888
int[] pixels = new int[width * height];
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int gray = decodedString[dataOffset + i] & 0xff;
pixels[i] = 0xff000000 | gray << 16 | gray << 8 | gray;
}
}

Bitmap pgm = Bitmap.createBitmap(metrics, pixels, width, height, BitmapConfig.Config. ARGB_8888);

关于java - Android解析base64Binary pgm到Bitmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26300695/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com