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格式的话里面颜色会不会丢失呢 初学者求教,急需解决的Java编程问题!!! 谁帮我看看,初学java 怎樣才可以算是編程超強者? read和write的问题 时间格式的问题,在线等 远程服务器上的文件下载,在线等 TCP 问题求解答 怎样根据查询返回的字段值(数值或字符型值)的宽度动态设置JTabel的Column的宽度 用JAVA开发 中国式报表,请大家给点意见 Think in java 源码 什么时候用抽象类,什么时候用接口? 免费获取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格式的话里面颜色会不会丢失呢