java 16进制处理bmp图片 现在有这么一个需求,我知道该图片的宽度,高度,色深数值。 有一段很长的全16进制的字符串,比如F0F0F0F0F0F0555555这样的东西。 这个16进制字符串就是该图片里面的颜色。。 我想根据这些东西生成一个bmp图片,我应该怎么做才好呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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格式的话里面颜色会不会丢失呢 处理通过servlet收到的xml数据,有疑惑 问个问题,高手请进 filter过滤器配置如何不过滤一些页面 java 求教画图保存问题? 什么是 Integration Build 什么是 Stream Nightly Builds 如何用正则表达式描述一个不在一对小括号中的逗号? JDBC驱动和CMP的问题 有关format data的问题。java如何实现c中sprintf的功能? 关于在线身份确认的问题 紧急!如何把一个用java写的软件包编译?就象c++的 makefile一样? 什么时候用抽象类,什么时候用接口? 免费获取java教学光盘,您只需付邮费
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位的会是多少呢?
F0F0F0 --> 6
32bit = 8个hex,但是据我所知这个不能生成bmp。因为,最高(左面)的两个Hex(8bit)会被认为是alpha值,也就是透明度,而bmp不支持如果32bit,
把前面的BufferedImage.TYPE_INT_RGB--->TYPE_INT_ARGB
后面的"bmp" --> "png" 即可
http://tieba.baidu.com/p/1282375108
我正在用的数据,对方也告诉我这是bmp图的数据. 不知道我输出成png格式的话里面颜色会不会丢失呢