读取RAW文件并显示图像

ariuschen 2008-12-14 04:16:31
RAW文件里全是像素数据, 8 bit , 368*241 , 没有文件头,调色板那些, 要怎么打开出来, 并画出图像啊?

我是新手, 这问题困扰了我很久, 用一般打开BMP图像的方法好像不行, 还是我没弄明白.

求高手指点!! 急!急!急! 我也没有分可以加, 希望得到指点.
...全文
3445 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinytiger_3 2009-11-21
  • 打赏
  • 举报
回复
最简单的可以用 Paintshop Pro 或者 Photoshop 等软件打开 生成图像
打开时输入数据类型 (8 bit / 16 bit / 32bit ...) 长宽 (width height) ... 即可
昨夜无风 2009-11-20
  • 打赏
  • 举报
回复
很简单啊,raw文件只有数据。显示的时候你填充一个BITMAPINFOHEAD结构和颜色板就可以啦

HDIB ReadRAWFile(CFile& file)
{
double min,max;
int width,height; //宽和高(需要自己填)
width = 368;
height = 241;

DWORD dwImageSize = width*height;
BYTE* pImageData = new BYTE[dwImageSize];

file.Read(pImageData,dwImageSize); //读取图像数据

// 填写结构体
BITMAPINFO bmi;
BITMAPINFOHEADER& bih = bmi.bmiHeader;
ZeroMemory(&bih, sizeof(BITMAPINFOHEADER));
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = width;
bih.biHeight= height;
bih.biCompression = BI_RGB;
bih.biPlanes = 1;
bih.biBitCount = 24;

// 写到DIB里面去
DWORD dwBmpBitsSize = WIDTHBYTES(width*24)*height;
HDIB hDIB = (HDIB) ::GlobalAlloc(GHND, bih.biSize + dwBmpBitsSize);
if (hDIB == 0)
{
TRACE(_T("Could not allocate memory for the DIB while loading from file! "));
delete [] pImageData;
return NULL;
}

LPSTR pDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
if (pDIB == 0)
{
TRACE(_T("Could not lock memory for the DIB while loading from file! "));
delete [] pImageData;
return NULL;
}

//信息头
CopyMemory(pDIB, &bmi.bmiHeader, bih.biSize);

//颜色板
LPRGBQUAD lpRGBQuad = LPRGBQUAD(pDIB + bih.biSize);
for ( i = 0; i < 256; i++)
{
lpRGBQuad->rgbRed = i;
lpRGBQuad->rgbGreen = i;
lpRGBQuad->rgbBlue = i;
lpRGBQuad->rgbReserved = 0;
lpRGBQuad++;
}
BYTE* pBmp = (BYTE*) (pDIB + bih.biSize + 256*sizeof(RGBQUAD));
for ( j=0; j <height; j++)
{
int nDepthInOffset = j*width;
int nDepthOutOffset = (height-j-1)*WIDTHBYTES(width*bih.biBitCount);
for (i=0; i <width; i++)
{
int nInOffset = nDepthInOffset + i;
int nOutOffset = nDepthOutOffset + i;
pBmp[nOutOffset] = pImageData[nInOffset];
}
}
//释放内存
delete [] pImageData;

::GlobalUnlock((HGLOBAL) hDIB);
return hDIB;

}
chopinyoung 2009-11-20
  • 打赏
  • 举报
回复
就用一般的 C语言的函数读就行 raw是普通文件 你连大小都知道了 就更简单了 通过 最简单的fread()就可以 别把它想的太神秘了。。。。。

More Question , Please Visit My QQ Space!!!

ChopinYoung

QQ:963528468(chopin)

WuHan University
SarahVR 2009-11-11
  • 打赏
  • 举报
回复
应该可以的,加个头尝试下看
ariuschen 2008-12-14
  • 打赏
  • 举报
回复
谢谢啊 ~~ 有高手知道吗? 是不是还可以给RAW加个文件头,然后用打开BMP的方式打开?

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧