java 16进制处理bmp图片
现在有这么一个需求,我知道该图片的宽度,高度,色深数值。有一段很长的全16进制的字符串,比如F0F0F0F0F0F0555555这样的东西。 这个16进制字符串就是该图片里面的颜色。。
我想根据这些东西生成一个bmp图片,我应该怎么做才好呢? --------------------编程问答--------------------
int width = 30;--------------------编程问答--------------------
int height = 3;
int charPerPixel = 6;
String pixelStr = "F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555"
+ "F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555"
+ "F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555F0F0F0F0F0F0555555";
if (pixelStr.length() % charPerPixel != 0
|| pixelStr.length() / charPerPixel != width * height) {
throw new IllegalArgumentException("像素信息长度不正确!");
}
BufferedImage img = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
int[] rgb = new int[width * height];
char[] charArray = pixelStr.toCharArray();
for (int pos = 0; pos < rgb.length; pos++) {
int color = 0;
for (int i = 0; i < charPerPixel; i++) {
int c = charArray[pos * charPerPixel + i];
if (c >= '0' && c <= '9') {
c -= '0';
} else if (c >= 'A' && c <= 'F') {
c -= 'A';
c += 10;
} else if (c >= 'a' && c <= 'f') {
c -= 'a';
c += 10;
} else {
throw new IllegalArgumentException("不能识别的字符" + c);
}
color <<= 4;
color |= c;
}
rgb[pos] = color;
}
img.setRGB(0, 0, width, height, rgb, 0, width);
ImageIO.write(img, "bmp", new File("D:/test/test.bmp"));
谢大大.. 还有我有些疑问。。
charPerPixel 这个是色深的数值么? 我看大大生成的是24位的图片,这个24跟6之间是什么样的关系呢?
还有我假如是32位的会是多少呢? --------------------编程问答-------------------- 是指每个像素,你用多少个16进制的字符表示
F0F0F0 --> 6 --------------------编程问答-------------------- 24bit = 6个hex,1个hex=4bit(0:0000~F:1111)
32bit = 8个hex,但是据我所知这个不能生成bmp。
因为,最高(左面)的两个Hex(8bit)会被认为是alpha值,也就是透明度,而bmp不支持
如果32bit,
把前面的BufferedImage.TYPE_INT_RGB--->TYPE_INT_ARGB
后面的"bmp" --> "png" 即可 --------------------编程问答--------------------
原来是这样. 了解色深之间的关系了。
32位的带alpha通道的bmp图, 我在网上搜的一篇文章。 但是那是关于vb的,
http://tieba.baidu.com/p/1282375108
我正在用的数据,对方也告诉我这是bmp图的数据.
不知道我输出成png格式的话里面颜色会不会丢失呢 --------------------编程问答-------------------- 被坦克哥抢先了
补充:Java , Java SE