现在我有三个BYTE数组,分别表示R,G,B信息,BYTE* ColorR,BYTE* ColorG,BYTE* ColorB
如何将这三个数组的数据一并在客户区绘制出来呢?使用pDC->SetPixel()太慢了,因为这三个数组的数据就是客户区的绘制数据,一个一个像素点的设置,肯定效率太低。
望高手出招!
如何将这三个数组的数据一并在客户区绘制出来呢?使用pDC->SetPixel()太慢了,因为这三个数组的数据就是客户区的绘制数据,一个一个像素点的设置,肯定效率太低。
望高手出招!
解决方案 »
- 防止别人注入自己的DLL
- 关于CString的使用,运行时出错!!
- CTreeCtrl与文件关联的问题!!!请各位指教!!
- 我把外国人做的程序的菜单改成中国汉字怎么有乱码怎么解决
- 如何动态修改浏览器中网页代码?
- 多媒体定时器的小问题!
- 如何得到对话框上那个文本框具有输入焦点?
- 100分求用SDK写的SMTP发送源码~~~~(急急急,高手救命呀)
- Cfile类读写问题
- 请问"Cannot access the ClassView information file.ClassView information will not be available"是什么意思?它让我不能用ClassView
- 基于网格技术的资源共享系统
- 如何自绘一个圆角菜单?
把你的数据封装成位图信息头bitmapinfo和数据,
然后用dib相关方法显示到一个compatible memdc上面.
CX, CY; // 这个值你必须知道,事先给定
int sz = CX * CY;
BYTE *pData = new BYTE[sz*4]; // show in 32 bits
for(int i=0; i< sz; i++)
{
pData[i*4+0] = *ColorB++ ;
pData[i*4+1] = *ColorG++;
pData[i*4+2] = *ColorR++;
pData[i*4+3] = 0;
}
CDC *pdc = GetDC();
CDC memdc;
CBitmap bmp;
CRect rt;
memdc.CreateCompatibleDC(pdc);
bmp.CreateBitmap(CX, CY , 1, 32,pData);
CBitmap* pOldBitmap = memdc.SelectObject(&bmp);
pdc->BitBlt(0,0, CX, CY, &memdc, 0, 0, SRCCOPY);
memdc.SelectObject(pOldBitmap);
memdc.DeleteDC();
ReleaseDC(pdc);
然后用SetDIBits直接画上去。
因为他的方法虽然简单,但是基于DDB的,也就是说兼容性会有很大的问题(假如你直接使用那代码)..
good luck.