unsigned char *m_recImg中存放着文件数据,图像是1072*1028字的大小,如何显示在对话框中?下面是我从网上找的程序,运行出错.在对话框中还添加了一个picture类型的控件,不知道如何使用。只要灰度显示在对话框中即可,求教高手!谢谢
CDC* pDC;
CBitmap bitmapmatrix;
int i=bitmapmatrix.CreateBitmap(m_iImgWidth,m_iImgHeight,1,32,m_recImg);
CDC dcCompMatrix;
dcCompMatrix.CreateCompatibleDC(pDC); //出错
dcCompMatrix.SelectObject(&bitmapmatrix); //出错
int k=pDC-> BitBlt(0,0,m_iImgWidth,m_iImgHeight,&dcCompMatrix,0,0,SRCCOPY);
CDC* pDC;
CBitmap bitmapmatrix;
int i=bitmapmatrix.CreateBitmap(m_iImgWidth,m_iImgHeight,1,32,m_recImg);
CDC dcCompMatrix;
dcCompMatrix.CreateCompatibleDC(pDC); //出错
dcCompMatrix.SelectObject(&bitmapmatrix); //出错
int k=pDC-> BitBlt(0,0,m_iImgWidth,m_iImgHeight,&dcCompMatrix,0,0,SRCCOPY);
解决方案 »
- OnSize时调用MoveWindow移动自定义的控件,自定义控件的OnPaint方法已经采用了双缓冲,但是还是会出现闪烁的 现象
- 请问VC++最擅长于什么方面的开发?
- 问个关于ARP协议的常识问题
- 怎样得到操作系统是什么语言?, 怎样让程序不重复运行?
- 怎么在VC中编译lua源码?
- help!在CRecordSet里 如何得到某个字段有几个取值?
- 怎样才能获得网络中SQL服务器的名称,请高手们指教!!!
- 求《vc++实现mpeg/jpeg编解码技术》一书附带光盘的源码
- 现在一些网络安全方面的软件都是在应用层作的,能不能将这些网络安全方面的软件作在网络层上呢?我觉的将这些软件作在数据链路层上有点不
- 编译器设置的问题?
- GDI过滤黑色
- 文档视图 mousemove 中画线,
你的指针都没有分配内存就直接用了,
CDC* pDC = GetDC();
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this); // device context for painting
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;
file.Open( "c:\\aa.bmp", CFile::modeRead | CFile::shareDenyNone ); // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.Read( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );
IStream * pStream = NULL;
IPicture * pPicture = NULL;
// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );
hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);
long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture->get_Width( &nWidth ); // 宽
pPicture->get_Height( &nHeight ); // 高
////////原大显示//////
CSize sz( nWidth, nHeight );
dc.HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
pPicture->Render(dc.m_hDC,0,0,sz.cx,sz.cy,
0,nHeight,nWidth,-nHeight,NULL);
if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem
::CoUninitialize();
CDialog::OnPaint();
}
}========
贴段IPicture显示图片的例子,你参考参考。
1 但是不是灰度的,都是绿色的,能看出来一点儿图像的本来面目
2 而且对话框一旦最小化图像就没有了。
3 如何控制图像显示的位置
看看这个链接,或许对你有帮助。