我先在内存中用CreateDIBSection创建了一幅位图,再把这幅位图选到一个兼容DC中,然后就dcCompatible.SetPixel(……)画图,但是最后用StretchBlt拷贝到屏幕上时却是黑色的,但是用BitBlt就是正常的灰度图,由于数据量很大,所以必须用StretchBlt,真是很奇怪啊!!!补充一下,位图没有超出定义的范围,每个像素的灰度值也是对的。请各位大师指点一下,感谢!
解决方案 »
- 两个创建无模式对话框的dll调用正常,卸载时,卸载第一个dll将第二个dll中的对话框窗体也卸载了??
- [ 求救] 有什么方法可以高效的处理IDirect3DSurface9内的数据,为什么LockRect得到的指针处理起来会超级慢
- 急!!!!!!!!求sapi4.0的SDK
- 一个特难的问题请教高手!!高手请进啊!!!!
- 问个菜问题,在vc.net下写c++代码。。。
- 用MFC创健ActiveX控件的一个简单问题?
- 我用vc写并口监控程序,要5ms采样一次,行不行?
- 使用WSARecv接收数据会有数据接收不到吗?
- 请问:winsock不好用???
- 小弟急求:开发"输入法"方面的编程资料(有奖:凡参与者均可获得输入法源代码)
- LoadFrame()出错,olelink出错,Release下调试编译运行都正常,Debug下编译正常就是不能运行
- 初学COM,征集方案:你会怎么设计下面的组件和接口?
int oldeMode=dc.SetStretchBltMode(COLORONCOLOR);
//设置位图信息
BITMAPINFOHEADER BMIH;
memset(&BMIH,0,sizeof(BITMAPINFOHEADER));
BYTE * pDrawingSurfaceBits=NULL;
BMIH.biSize=sizeof(BITMAPINFOHEADER);
BMIH.biWidth=N;
BMIH.biBitCount=24;
BMIH.biPlanes=1;
BMIH.biCompression=BI_RGB;
BMIH.biHeight=m_num2;
BMIH.biSizeImage=((((BMIH.biWidth*BMIH.biBitCount)+31) & ~31)>>3)*BMIH.biHeight;
if(hbitmap != NULL)
{
DeleteObject(hbitmap);
hbitmap=NULL;
}
hbitmap=CreateDIBSection(dc.GetSafeHdc(),(CONST BITMAPINFO *)&BMIH,DIB_RGB_COLORS, (void **)&pDrawingSurfaceBits,
NULL,0);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(&dc);
HBITMAP hOldBitmap=(HBITMAP)SelectObject(dcCompatible.GetSafeHdc(),hbitmap);
int a;
float k=255.00/(max-min);
for(i=0;i<N;i++)
{
for(j=0;j<m_num2;j++)
{
a=(int)k*(atof(array2[i][j])-min);
dcCompatible.SetPixel(i,j,RGB(a,a,a));
}
}
dc.StretchBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),&dcCompatible,0,0,N,m_num2,SRCCOPY);
SelectObject(dcCompatible.GetSafeHdc(),hOldBitmap);
其中N是横向的大小,m_num2是纵向的大小,hbitmap是个全局变量,array2存放的是要转化成灰度的数据,max,min分别是这些数据中的最大值和最小值,我把最大值映射为255,最小值映射为0,其它的做线性映射。在程序中N=100,m_num2大概为18267,我已经跟踪调试程序,转化的灰度值a不是0~~