会 员 登 录
热 门 文 章
相 关 文 章
- 没有文章
Tags(标签)
自己写了一个imagebuffer 转 bmp 流的代码段,希望对大家有用。
try {
BufferedImage bi = null;
if (isURL == true) {
bi = ImageIO.read(new URL(inFileName));
}
else {
bi = ImageIO.read(new File(inFileName));
}
int[] rgbArray = new int[101 * 29];//我测试用的图象文件象素值宽度是101宽,29长的
bi.getRGB(0, 0, 101, 29, rgbArray, 0, 101);
for (int i = 0; i < 101 * 29; i++) {//我做的只是双色图,所以这里查出每一个象素是1(黑)还是0(白)
if ((rgbArray[i] & 0xffffff) == 0x000000)
rgbArray[i] = 0;
else
rgbArray[i] = 1;
}
//以下是BMP文件格式的定义,更加具体的说明可以到http://www.wotsit.org找
int[] identifier = { 'B', 'M' };
int[] fileSize = { 0x0E, 0x02, 0x00, 0x00 };
int[] reserved = { 0x00, 0x00, 0x00, 0x00 };
int[] bitmapDataOffset = { 0x3E, 0x00, 0x00, 0x00 };
int[] bitmapHeaderSize = { 0x28, 0x00, 0x00, 0x00 };
int[] width = { 0x65, 0x00, 0x00, 0x00 };
int[] height = { 0x1D, 0x00, 0x00, 0x00 };
int[] planes = { 0x01, 0x00 };
int[] bitsPerPixel = { 0x01, 0x00 };
int[] compression = { 0x00, 0x00, 0x00, 0x00 };
int[] bitmapDataSize = { 0xD0, 0x01, 0x00, 0x00 };
int[] hResolution = { 0x00, 0x00, 0x00, 0x00 };
int[] vResolution = { 0x00, 0x00, 0x00, 0x00 };
int[] colors = { 0x00, 0x00, 0x00, 0x00 };
int[] importantColors = { 0x00, 0x00, 0x00, 0x00 };
int[] palette = { 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00 };
//记住bmp没一个扫描行都要扩充到下一个4bytes的倍数,如101就要变成128,扩充的byte补0即可
int[] bitmapData = new int[(101 + 27) * 29 / 8];
int n = 0;
for (int i = 0; i < 29; i++) { //BMP格式是从最后一行开始scan的
for (int j = 1; j <= 101; j++) {
if (rgbArray[(28 - i) * 101 + j - 1] == 1) {
bitmapData[n] = bitmapData[n] | (1 << (8 - j % 8) % 8);
}
if (j % 8 == 0) {
n++;
}
if (j == 101) {
n += 4;
}
}
BufferedImage bi = null;
if (isURL == true) {
bi = ImageIO.read(new URL(inFileName));
}
else {
bi = ImageIO.read(new File(inFileName));
}
int[] rgbArray = new int[101 * 29];//我测试用的图象文件象素值宽度是101宽,29长的
bi.getRGB(0, 0, 101, 29, rgbArray, 0, 101);
for (int i = 0; i < 101 * 29; i++) {//我做的只是双色图,所以这里查出每一个象素是1(黑)还是0(白)
if ((rgbArray[i] & 0xffffff) == 0x000000)
rgbArray[i] = 0;
else
rgbArray[i] = 1;
}
//以下是BMP文件格式的定义,更加具体的说明可以到http://www.wotsit.org找
int[] identifier = { 'B', 'M' };
int[] fileSize = { 0x0E, 0x02, 0x00, 0x00 };
int[] reserved = { 0x00, 0x00, 0x00, 0x00 };
int[] bitmapDataOffset = { 0x3E, 0x00, 0x00, 0x00 };
int[] bitmapHeaderSize = { 0x28, 0x00, 0x00, 0x00 };
int[] width = { 0x65, 0x00, 0x00, 0x00 };
int[] height = { 0x1D, 0x00, 0x00, 0x00 };
int[] planes = { 0x01, 0x00 };
int[] bitsPerPixel = { 0x01, 0x00 };
int[] compression = { 0x00, 0x00, 0x00, 0x00 };
int[] bitmapDataSize = { 0xD0, 0x01, 0x00, 0x00 };
int[] hResolution = { 0x00, 0x00, 0x00, 0x00 };
int[] vResolution = { 0x00, 0x00, 0x00, 0x00 };
int[] colors = { 0x00, 0x00, 0x00, 0x00 };
int[] importantColors = { 0x00, 0x00, 0x00, 0x00 };
int[] palette = { 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00 };
//记住bmp没一个扫描行都要扩充到下一个4bytes的倍数,如101就要变成128,扩充的byte补0即可
int[] bitmapData = new int[(101 + 27) * 29 / 8];
int n = 0;
for (int i = 0; i < 29; i++) { //BMP格式是从最后一行开始scan的
for (int j = 1; j <= 101; j++) {
if (rgbArray[(28 - i) * 101 + j - 1] == 1) {
bitmapData[n] = bitmapData[n] | (1 << (8 - j % 8) % 8);
}
if (j % 8 == 0) {
n++;
}
if (j == 101) {
n += 4;
}
}
附件:
没有附件
0
票
顶一下
票
顶一下
0
票
踩一下
票
踩一下
| 文 章 评 论 | ||||||||
| ||||||||



您现在的位置: