如何根据数据文件绘制位图 我的数据文件是RGB值,而不是图像文件,怎样设置文件头和调色板来显示出位图,位图是8位,哪位高手能给个源程序,最好是VC的,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的数据文件是RGB值?那么最少为16Bit的呀..怎么又变成了8Bit?8Bit的位数据是调色板索引号,RGB值保存在rgbQuad中~~~~~你的数据文件是否就是索引号啊?显示很容易的. 不要求速度的话就比较灵活一些,可以先按点画在一个DC上,然后在保存DC位图,否则你就要先研究RGB的组织方式,他的高度宽度,然后组织出一个位图,还有不清楚你是需要内存中的位图还是位图文件,别人给你代码也许也没用 DWORD dwSize = W*H; BITMAPFILEHEADER bmFH; int nPaletteEntries = 256; bmFH.bfType = 19778; bmFH.bfSize = (DWORD) ( sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nPaletteEntries * sizeof(RGBQUAD)) + dwSize; bmFH.bfReserved1 = bmFH.bfReserved2 = 0; bmFH.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + nPaletteEntries * sizeof(RGBQUAD); BITMAPINFO *FileBMP; char bmpBuf[2048]; FileBMP = (BITMAPINFO *)bmpBuf; FileBMP->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); FileBMP->bmiHeader.biWidth = W; FileBMP->bmiHeader.biHeight = H; FileBMP->bmiHeader.biPlanes = 1; FileBMP->bmiHeader.biBitCount = 8; FileBMP->bmiHeader.biCompression = BI_RGB; FileBMP->bmiHeader.biSizeImage = 0; FileBMP->bmiHeader.biXPelsPerMeter = 0; FileBMP->bmiHeader.biYPelsPerMeter = 0; FileBMP->bmiHeader.biClrUsed = 0; FileBMP->bmiHeader.biClrImportant = 0; for( int k = 0; k < 256; ++k) { FileBMP->bmiColors[k].rgbBlue = (BYTE)k; FileBMP->bmiColors[k].rgbGreen = (BYTE)k; FileBMP->bmiColors[k].rgbRed = (BYTE)k; FileBMP->bmiColors[k].rgbReserved = 0; } // pDC->SelectPalette(pScrnPalette, FALSE); // pDC->RealizePalette(); pDC->SetStretchBltMode(COLORONCOLOR); StretchDIBits((HDC)*pDC, 0, 0, W, H, 0, 0, W, H, lpDest, FileBMP, DIB_RGB_COLORS, SRCCOPY);// W是宽,H是高,lpDest是数据指针 vc怎么读取列表控件中的数据? 不缺人的软件公司都是要黄的,好的软件公司都缺人。 讨论 关于CList<>声明变量的问题 如何在磁盘上给文件快速预留一大片空间? 怎么保存图片 如何编写CStack,实现任意数据类型操作类 在读取进程内存过程出错,希望得到帮助! 高手帮忙!!!一个基于对话框的程序。我现在都要崩溃了!! 把32,24位位图转换为2色位图的源码? MFC滚动条 大家进来谈一谈快速傅立叶变换,要给出代码! 请问如何获得文档视图上某点的颜色值?
你的数据文件是否就是索引号啊?显示很容易的.
还有不清楚你是需要内存中的位图还是位图文件,别人给你代码也许也没用
DWORD dwSize = W*H;
BITMAPFILEHEADER bmFH;
int nPaletteEntries = 256;
bmFH.bfType = 19778;
bmFH.bfSize = (DWORD) ( sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) +
nPaletteEntries * sizeof(RGBQUAD)) +
dwSize;
bmFH.bfReserved1 = bmFH.bfReserved2 = 0;
bmFH.bfOffBits = (DWORD)sizeof(BITMAPFILEHEADER) +
sizeof(BITMAPINFOHEADER) +
nPaletteEntries * sizeof(RGBQUAD);
BITMAPINFO *FileBMP;
char bmpBuf[2048];
FileBMP = (BITMAPINFO *)bmpBuf;
FileBMP->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
FileBMP->bmiHeader.biWidth = W;
FileBMP->bmiHeader.biHeight = H;
FileBMP->bmiHeader.biPlanes = 1;
FileBMP->bmiHeader.biBitCount = 8;
FileBMP->bmiHeader.biCompression = BI_RGB;
FileBMP->bmiHeader.biSizeImage = 0;
FileBMP->bmiHeader.biXPelsPerMeter = 0;
FileBMP->bmiHeader.biYPelsPerMeter = 0;
FileBMP->bmiHeader.biClrUsed = 0;
FileBMP->bmiHeader.biClrImportant = 0;
for( int k = 0; k < 256; ++k)
{
FileBMP->bmiColors[k].rgbBlue = (BYTE)k;
FileBMP->bmiColors[k].rgbGreen = (BYTE)k;
FileBMP->bmiColors[k].rgbRed = (BYTE)k;
FileBMP->bmiColors[k].rgbReserved = 0;
}
// pDC->SelectPalette(pScrnPalette, FALSE);
// pDC->RealizePalette();
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits((HDC)*pDC,
0, 0, W, H,
0, 0, W, H,
lpDest, FileBMP, DIB_RGB_COLORS, SRCCOPY);//