图象怎么生成二进制并存为TXT文本 ( 积分: 100 )

  • 主题发起人 主题发起人 mrcorp
  • 开始时间 开始时间
M

mrcorp

Unregistered / Unconfirmed
GUEST, unregistred user!
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x38,0x78,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x7E,0xF8},
{0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80},
{0xE0,0xFF,0xFF,0xFF,0xFF,0x3E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x03,0x07,0x1F,0x3F,0xFE,0xFC,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0x7F,0x3F},
{0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,0x7F,0xFF,0xFE,0xFC,0xF8,0xF8,0xF0},
{0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x80,0xC0,0xE0,0x70,0x78,0x3C,0x1E,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F},
{0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1E,0x1E,0x1C,0x1C,0x18,0x10,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

以上一幅64x64象素的图象用字模提取软件生成出来的512个字节的十六进制编码数据.我想变成二进制的,并存为TXT文本.或者就直接将一幅图生成二进制编码数据.应该怎么做?
 
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x18,0x38,0x38,0x78,0xF0,0xF0,0xE0,0xC0,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x7E,0xF8},
{0xF0,0xE0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80},
{0xE0,0xFF,0xFF,0xFF,0xFF,0x3E,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x03,0x07,0x1F,0x3F,0xFE,0xFC,0xF8,0xF0,0xE0,0x80,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF8,0xFC,0x7F,0x3F},
{0x1F,0x0F,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x0F,0x1F,0x7F,0xFF,0xFE,0xFC,0xF8,0xF8,0xF0},
{0xE0,0xC0,0xC0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x80,0xC0,0xE0,0x70,0x78,0x3C,0x1E,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1F,0x1F},
{0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x1E,0x1E,0x1C,0x1C,0x18,0x10,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},

以上一幅64x64象素的图象用字模提取软件生成出来的512个字节的十六进制编码数据.我想变成二进制的,并存为TXT文本.或者就直接将一幅图生成二进制编码数据.应该怎么做?
 
按照你的意思,64*64的图像保存下来只有512个字节,那么你的图像实际上是黑白二色图像,64*64=512*8=4096。也就是二进制中0无点,1有点。
但是我不是很明白你的意思,保存成二进制的,还要存成文本文件?二进制文件就是二进制的,怎么能存成文本文件呢?能不能给一个最终结果的例子?
 
一个字节就是一个ascii码,只是有些是不可见和不可打印的。
这样,你就用个循环一个字节一个字节的把它转换成ascii就是你要的txt文本了呀。只不过,你也看不明生面的文本是什么东东,肯定有不少怪字符。
 
jianguobu,假如ASCII中有0x08,那么就会出现退格,假如有0x00,就成了文件结束符,后面的内容都不会再显示了。
 
是,这些控制符要想个办法存起来。

只不过,我想不通楼主要转换成文本有什么意义?
 
是啊,咱们俩在这里讨论,楼主不见了。 :(
我猜测楼主是不是想生成下面的东西:
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
…………
11110000 11110000 00111111 00000000 00000000 00000000 00000000 00000000

如果是这样的话就很容易的。
 
呵呵,说不清了。
 
感谢各位.可能是我没有说清楚.让大家理解不全.我本意是这样的:

以上一幅64x64象素的图象用字模提取软件生成出来的512个字节的十六进制编码数据,这样的图象有300多个,这样生成出来的数据就超过64K,所以不能用一般的单片机编译器直接生成十六进制(*.hex)格式的文件,因为十六进制文件格式只支持64K的地址寻址。现我想这样处理:
编写一个电脑软件,把像以上格式的文件中的数据按顺序地追加到一个二进制(*.bin)的文件中,操作的过程是这样:先用字模提取软件把一幅64x64的图像生成以上格式的内容,然后再把这些内容粘帖到你编写的软件的文本框中,通过命令按扭把文本框中的数据按顺序的追加到一个二进制的文件中,然后把文本框中的内容清除,再把另一幅图像的数据粘帖进来,再追加到同一个二进制文件中

是个朋友的要求.
 
1、64*64的图像提取文本
2、文本贴到文本框
3、生成二进制文件BIN
4、追加BIN
楼主,你这样做很麻烦啊。
你用了字模提取软件,这个本身就受限制,只能生成你上面那样的格式。
我提供两种思路,仅供参考。
1、自己编写图像提取程序,直接生成符合你的要求的二进制文件,提供图像追加的功能;
2、利用单片机编译器生成的HEX文件,例如生成出来3个文件,1.hex,2.hex,3.hex
利用DOS命令
COPY 1.HEX+2.HEX+3.HEX M.HEX /B
将其合并到M.HEX文件中。
 
肥牛大人: 字模提取软件是厂家提供的.只能得到十六进制(*.hex)格式的文件.我不知道怎么把图象得到二进制(*.hex)格式的文件.恳请释出段代码好吗.
 
肥牛大人:恳请赐教
 
如果需要把图像直接生成你所需要的格式文件,首先需要知道你所处理的原始图像是彩色的还是黑白的。因为你的目的是要生成黑白单色图像,因此,如果是彩色图像需要先进行处理,得到黑白图像。
var
bStream : TStream;
begin
Image1.Picture.Bitmap.LoadFromFile('c:/1.bmp');
Image1.Picture.Bitmap.PixelFormat :=pf1bit;
Image1.Picture.Bitmap.SaveToStream(bStream);
end;
现在,BMP图像保存在bStream中了,而且保存的是单色图像格式。从中取得你要的数据,就需要了解BMP的存储格式了。
1. BMP文件组成
BMP文件由文件头、位图信息头、颜色信息和图形数据四部分组成。
2. BMP文件头
BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息。

其结构定义如下:

typedef struct tagBITMAPFILEHEADER
{
WORDbfType; // 位图文件的类型,必须为BM
DWORD bfSize; // 位图文件的大小,以字节为单位
WORDbfReserved1; // 位图文件保留字,必须为0
WORDbfReserved2; // 位图文件保留字,必须为0
DWORD bfOffBits; // 位图数据的起始位置,以相对于位图
// 文件头的偏移量表示,以字节为单位
} BITMAPFILEHEADER;

3. 位图信息头

BMP位图信息头数据用于说明位图的尺寸等信息。
typedef struct tagBITMAPINFOHEADER{
DWORD biSize; // 本结构所占用字节数
LONGbiWidth; // 位图的宽度,以像素为单位
LONGbiHeight; // 位图的高度,以像素为单位
WORD biPlanes; // 目标设备的级别,必须为1
WORD biBitCount// 每个像素所需的位数,必须是1(双色),
// 4(16色),8(256色)或24(真彩色)之一
DWORD biCompression; // 位图压缩类型,必须是 0(不压缩),
// 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage; // 位图的大小,以字节为单位
LONGbiXPelsPerMeter; // 位图水平分辨率,每米像素数
LONGbiYPelsPerMeter; // 位图垂直分辨率,每米像素数
DWORD biClrUsed;// 位图实际使用的颜色表中的颜色数
DWORD biClrImportant;// 位图显示过程中重要的颜色数
} BITMAPINFOHEADER;

4. 颜色表
颜色表用于说明位图中的颜色,它有若干个表项,每一个表项是一个RGBQUAD类型的结构,定义一种颜色。RGBQUAD结构的定义如下:

typedef struct tagRGBQUAD {
BYTErgbBlue;// 蓝色的亮度(值范围为0-255)
BYTErgbGreen; // 绿色的亮度(值范围为0-255)
BYTErgbRed; // 红色的亮度(值范围为0-255)
BYTErgbReserved;// 保留,必须为0
} RGBQUAD;
颜色表中RGBQUAD结构数据的个数有biBitCount来确定:
当biBitCount=1,4,8时,分别有2,16,256个表项;
当biBitCount=24时,没有颜色表项。
位图信息头和颜色表组成位图信息,BITMAPINFO结构定义如下:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader; // 位图信息头
RGBQUAD bmiColors[1]; // 颜色表
} BITMAPINFO;


5. 位图数据
位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:

当biBitCount=1时,8个像素占1个字节;
当biBitCount=4时,2个像素占1个字节;
当biBitCount=8时,1个像素占1个字节;
当biBitCount=24时,1个像素占3个字节;
Windows规定一个扫描行所占的字节数必须是
4的倍数(即以long为单位),不足的以0填充,
一个扫描行所占的字节数计算方法:
DataSizePerLine= (biWidth* biBitCount+31)/8;
// 一个扫描行所占的字节数
DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数
位图数据的大小(不压缩情况下):
DataSize= DataSizePerLine* biHeight;

从上面的结构可以知道,单色图像的位图数据就是你所要求的数据,我们把这部分取出来保存到一个文件中就可以了。至于前面的BMP文件头,你可以不用关心它。文件头的长度你可以算出来,你从开始偏移N个字节取数据保存就行了。你找一个可以察看16进制文件的软件打开BMP图就知道了,比如WINHEX,ULTRAEDIT等。
 
接受答案了.
 
后退
顶部