MFC对话框显示8位缓冲区

MFC对话框显示8位缓冲区,mfc,dib,Mfc,Dib,在我的MFC对话框中添加了一个图片控件。将其类型设置为Frame。需要在图片控件上显示8位缓冲区(未从文件加载)。图像按比例缩小、重复、对角倾斜。不对。我无法使它与控制装置正确匹配。调整了控件的大小,但仍然存在相同的问题 w=750; h=850; bpp=8 void CDispDlg::BuildINfoAndDisp(intw,inth) { m_pbmi=(BITMAPINFO*)新字节[sizeof(BITMAPINFO)+256)*sizeof(RGBQUAD)]; m_pbmi->

在我的MFC对话框中添加了一个图片控件。将其类型设置为Frame。需要在图片控件上显示8位缓冲区(未从文件加载)。图像按比例缩小、重复、对角倾斜。不对。我无法使它与控制装置正确匹配。调整了控件的大小,但仍然存在相同的问题

w=750;
h=850;
bpp=8
void CDispDlg::BuildINfoAndDisp(intw,inth)
{
m_pbmi=(BITMAPINFO*)新字节[sizeof(BITMAPINFO)+256)*sizeof(RGBQUAD)];
m_pbmi->bmiHeader.bSize=sizeof(BitMapInfo头文件);
m_pbmi->bmiHeader.biPlanes=1;
m_pbmi->bmiHeader.biBitCount=bpp;
m_pbmi->bmiHeader.biCompression=BI_RGB;
m_pbmi->bmiHeader.biSizeImage=0;
m_pbmi->bmiHeader.biXpelsPerMeter=0;
m_pbmi->bmiHeader.biYpelsPerMeter=0;
m_pbmi->bmiHeader.biclrued=0;
m_pbmi->bmiHeader.biClrImportant=0;
对于(int i=0;i<256;i++)
{
m_pbmi->bmiColors[i].rgbBlue=i;
m_pbmi->bmiColors[i].rgbGreen=i;
m_pbmi->bmiColors[i].rgbBRed=i;
m_pbmi->bmiColors[i].rgbReserved=0;
}
m_pbmi->bmiHeader.biWidth=w;
m_pbmi->bmiHeader.biHeight=-h;
CClientDC(GetDlgItem(IDC_PicCntrl_DSIP));
正确无误;
GetDlgItem(IDC_PicCntrl_DSIP)->GetClientRect(&rect);
SetStrechBltMode(dc.GetSafeHdc(),COLORNOCOLOR);
StretchBIBits(dc.GetSafeHdc(),0,0,矩形宽度,矩形高度,0,0,m_wImage,m_hImage,&m_U8imageBuf,m_pbmi,DIB_RGB_颜色,SRCCOPY);
}

我不太清楚这个表达式中有多少拼写错误:
新字节(sizeof(BITMAPINFO)+256)*sizeof(RGBQUAD)]“相同的问题”-问题是什么?更正了一个打字错误。我得把它打进去。为什么图像呈对角线显示?。扫描线需要
DWORD
对齐。如果不是,渲染图像可能会出现倾斜。750不是4的偶数倍。如果您提供了结果的图像,则会有所帮助。通过将8位图像缓冲区映射到24位图像缓冲区,可以使其正常工作。将检查扫描行。有没有办法通过获取图片控件上的点坐标来获取图像X和Y?我不太清楚这个表达式中有多少打字错误:
newbyte(sizeof(BITMAPINFO)+256)*sizeof(RGBQUAD)]“相同的问题”-问题是什么?更正了一个打字错误。我得把它打进去。为什么图像呈对角线显示?。扫描线需要
DWORD
对齐。如果不是,渲染图像可能会出现倾斜。750不是4的偶数倍。如果您提供了结果的图像,则会有所帮助。通过将8位图像缓冲区映射到24位图像缓冲区,可以使其正常工作。将检查扫描行。有没有办法通过获取图片控件上的点坐标来获取图像X和Y?。