小弟急求!请问如何显示并处理.raw格式的图象文件?(100分)

  • 主题发起人 主题发起人 renjie
  • 开始时间 开始时间
R

renjie

Unregistered / Unconfirmed
GUEST, unregistred user!
我的这个图象是这样的:128*128字节表示128*128大小的一幅有256个
灰度级的灰度图象,想要将其显示出来并进行处理
 
你可以建立一个BMP图象文件的文件头,一个256色的调色板,把调色板中的颜色
设置成256级的灰度,然后按BMP文件的格式写入一个文件中,再把raw数据写进
去,最后用TBitmap.LoadFromFile载入(或者用TImage),就可以显示出来了。
一般raw格式的文件其实就是未压缩的图象数据,用这种方法应该可行。
不知道你的图象文件具体是什么格式,所以不能保证这个方法可以用。
 
这是以.dat结尾的一个图象文件,只有用特定的一个软件才显示,
或改尾缀为.raw才能用phototshop看。这个文件完全就是一个二
进制流文件,每一位表示一个点的灰度值,共16384字节表示一个
128*128的图象,我是一个新手,望给出详细过程。不胜感激!
 
//---------------------------------------------------------------------------
struct TGrayBMPHeader
{
BITMAPINFOHEADER header;
RGBQUAD pals[256];

TGrayBMPHeader();

void SetInfo(int w,int h)
{
header.biWidth = w;
header.biHeight = -h;
}
};
//---------------------------------------------------------------------------
TGrayBMPHeader::TGrayBMPHeader()
{
header.biSize = sizeof(header);
header.biPlanes = 1;
header.biBitCount = 8;
header.biCompression = BI_RGB;
header.biSizeImage = 0;
header.biXPelsPerMeter = 120;
header.biYPelsPerMeter = 120;
header.biClrUsed = 0;
header.biClrImportant = 0;

for(int i=0;i<256;i++)
{
pals.rgbBlue = (unsigned char)i;
pals.rgbGreen = (unsigned char)i;
pals.rgbRed = (unsigned char)i;
pals.rgbReserved = 0;
}
}
//---------------------------------------------------------------------------
void DrawBMP(HDC dc,char *data)//128*128
{
TGrayBMPHeader header;
header.header.biWidth = 128;
header.header.biHeight = -128;

//用new分配的内存有时在NT上不能显示出来,
//不知道为什么.
unsigned char *tp = (unsigned char *)GlobalAlloc(GMEM_FIXED,128*128);
//注意每行必须对齐到4字节,否则有问题
memcpy(tp,data,128*128);
StretchDIBits(dc,0,0,128,128,0,0,128,128,tp,(BITMAPINFO *)&amp;header,DIB_RGB_COLORS,SRCCOPY);
GlobalFree(tp);
}
 
做图象处理作业吗?呵呵,其实很简单啊。
用标准的文件读操作读该文件,获取每一个字节,该字节就代表矩阵图象这点的
灰度值啊。(该图象文件存放的就全部是这128*128个点的灰度值啊!)
如果要显示这些灰度数据,只要用RGB(value,value,value)在相应的画布上面
相应坐标处画点就好啦。value就是这个字节的值啦。
掌握了上述原理,只要对这些数据进行图象算法的处理就okay啦。


 
多人接受答案了。
 
后退
顶部