小弟想用strechblt 画出数组color里的8位灰度图像数据,未遂……请教大虾……代码如下:void CShow_pic2Dlg::DrawImg(CDC *pDC, int x, int y)
{
int color[16][16]={
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
int imgWidth=16,imgHeight=16;
char __bif[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256];
BITMAPINFO& bif = *(BITMAPINFO*)__bif;
bif.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bif.bmiHeader.biWidth = imgWidth;
bif.bmiHeader.biHeight = imgHeight;
bif.bmiHeader.biPlanes = 1;
bif.bmiHeader.biBitCount = 8;
bif.bmiHeader.biCompression = BI_RGB;
bif.bmiHeader.biSizeImage = 0;
bif.bmiHeader.biXPelsPerMeter = 96;
bif.bmiHeader.biYPelsPerMeter = 96;
bif.bmiHeader.biClrUsed = 0;
bif.bmiHeader.biClrImportant = 0;
for(int i = 0; i < 256; ++i)
{
int b = i;
bif.bmiColors[i].rgbBlue = b;
bif.bmiColors[i].rgbGreen = b;
bif.bmiColors[i].rgbRed = b;
bif.bmiColors[i].rgbReserved = 0;
} StretchDIBits(*pDC, x, y + imgHeight-1, imgWidth, -imgHeight,
0,0, imgWidth, imgHeight, color,
(BITMAPINFO*)&bif, DIB_RGB_COLORS , SRCCOPY);
}void CShow_pic2Dlg::OnButton2()
{
// HWND hWnd = AfxGetMainWnd()-> m_hWnd;
// CDC* pdc; //CDC是一个类,用于封装hDc
// HDC hDC= ::GetDC(hWnd);
CPaintDC dc(this);
CDC *pDC=&dc;
DrawImg(pDC, 0 , 0);
}
{
int color[16][16]={
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128},
{256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};
int imgWidth=16,imgHeight=16;
char __bif[sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256];
BITMAPINFO& bif = *(BITMAPINFO*)__bif;
bif.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bif.bmiHeader.biWidth = imgWidth;
bif.bmiHeader.biHeight = imgHeight;
bif.bmiHeader.biPlanes = 1;
bif.bmiHeader.biBitCount = 8;
bif.bmiHeader.biCompression = BI_RGB;
bif.bmiHeader.biSizeImage = 0;
bif.bmiHeader.biXPelsPerMeter = 96;
bif.bmiHeader.biYPelsPerMeter = 96;
bif.bmiHeader.biClrUsed = 0;
bif.bmiHeader.biClrImportant = 0;
for(int i = 0; i < 256; ++i)
{
int b = i;
bif.bmiColors[i].rgbBlue = b;
bif.bmiColors[i].rgbGreen = b;
bif.bmiColors[i].rgbRed = b;
bif.bmiColors[i].rgbReserved = 0;
} StretchDIBits(*pDC, x, y + imgHeight-1, imgWidth, -imgHeight,
0,0, imgWidth, imgHeight, color,
(BITMAPINFO*)&bif, DIB_RGB_COLORS , SRCCOPY);
}void CShow_pic2Dlg::OnButton2()
{
// HWND hWnd = AfxGetMainWnd()-> m_hWnd;
// CDC* pdc; //CDC是一个类,用于封装hDc
// HDC hDC= ::GetDC(hWnd);
CPaintDC dc(this);
CDC *pDC=&dc;
DrawImg(pDC, 0 , 0);
}
解决方案 »
- 关于VC调用CMD-Devcon命令不能正常执行的问题?
- ACE实现多路连接多路转发怎么样搞,效率高?
- HOOK拦截,14种HOOKS我应该用哪种?
- 一般局域网内跨网段通信用什么技术?
- 请问外部类(如对话框类)如何访问多文档下的文档类下的成员
- CFileFind类查找文件,怎么查找结果总是比实际情况少一个文件?请高手帮忙解答
- 各位高手请问如何实现根据左树视图选择动态生成右边的视图
- 请问哪里有ucd snmp的API函数的详细说明资料?3X……
- 怎样在应用程序中添加数据库???各位大侠帮帮忙!!
- 高手指教关于TAPI问题!!小女子这相有理了
- MFC EDIT控件不能输入字符?
- ADO ACCESS 连接器和数据的 Open 返回值是什么?
CDC *pDC=&dc;
DrawImg(pDC, 0 , 0);
-->
CDC* pDC = GetDC();
DrawImg(pDC, 0 , 0);
ReleaseDC(pDC);CPaintDC不能用在这里
A CPaintDC object can only be used when responding to a WM_PAINT message, usually in your OnPaint message-handler member function.
首先很感谢你的解答!
按照你的指点,我已经把原来的代码改为
CDC* pDC = GetDC();
DrawImg(pDC, 0 , 0);
ReleaseDC(pDC);
并且图像也画出来了,如下:可是我想象中的图片应该是一条条色带,白、灰、黑、白、灰、黑、白、灰、黑……
为什么会是这样呢……请教……