vfw编程 得到了每幅图像的数据区 将24位位图转换成灰度图 不会!!!!!

ssbelle 2005-06-17 10:35:39
在回调函数FrameCallBack中很容易得到每幅图像的数据区 可是是24位的位图 怎样转换为灰度图呢? 从csdn以往的帖子里找了很多方法 都不会用 有没有不用句柄 调色板 就可以转化过去的? 给个例子 多谢!!!



这个是我找到的一个并自己改了改 改错了 哪位看看还可以用不
BOOL Bmp2Gry(LPBYTE CaptureData, LPBYTE *lpGrayData)
{
CClientDC dc(CWnd::GetDesktopWindow());
RGBQUAD rgb[256];
CBitmap bitmap;
bitmap.SetBitmapBits(320*240*3,CaptureData);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
memdc.SelectObject( &bitmap );
::GetDIBColorTable( memdc, 0, 256 , rgb );

int nBmpSize = 0;
nBmpSize = ((((320 * 24) + 31) & ~31) >> 3) * 240;

if(*lpGrayData == NULL)
*lpGrayData = new BYTE[nBmpSize];
memset(*lpGrayData, 0, nBmpSize);
for(int i = 0; i < nBmpSize; i ++)
{
int nIndex = CaptureData[i];
double r = (double)(rgb[nIndex].rgbRed);
double g = (double)(rgb[nIndex].rgbGreen);
double b = (double)(rgb[nIndex].rgbBlue);
BYTE c = (BYTE)(r*0.29900 + g*0.58700 + b*0.11400);
int pos = ((240 - (i/320) - 1)*320) + (i % 320);
(*lpGrayData)[pos] = c;
}

delete []CaptureData;
CaptureData = NULL;

return TRUE;
}


多谢!!
...全文
135 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssbelle 2005-06-18
  • 打赏
  • 举报
回复
我已经自己写了位图头了 也把数据提过来了 请问怎么写调色板?? 插到哪里去?
Zhymax 2005-06-18
  • 打赏
  • 举报
回复
void Gray(BYTE *pData, UINT nSize, int nHeight)
{
BYTE *pCurLine;
int nBytesOfLine;
BYTE nGray;
BYTE *r, *g, *b;

nBytesOfLine = nSize / nHeight;

for (int i=0; i<nHeight; i++) {
pCurLine = pData;
pData += nBytesOfLine;

while (pCurLine<pData) {
b = pCurLine++;
g = pCurLine++;
r = pCurLine++;
// pCurLine++; // 32BIT

nGray = (BYTE)( ((*r) * 30 + (*g) * 59 + (*b) * 11) / 100 );
*b = *g = *r = nGray;
}
}
}
xing_xing_xing 2005-06-18
  • 打赏
  • 举报
回复
当然不是8位的了,只是三个通道的颜色一样了。看起来就是灰度图。
8位图,要自己写,位图头/调色板/索引数据...
ssbelle 2005-06-18
  • 打赏
  • 举报
回复
多谢 !! 可以变灰度图了 可是为什么我打开图片的属性还是24位的 不是八位的呢?
ssbelle 2005-06-18
  • 打赏
  • 举报
回复
实现了 很感谢!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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