急另,有没有绘图方面的好的资料介绍????
解决方案 »
- PreTranslateMessage(MSG* pMsg)函数使用问题
- MFC txt文件读取
- =WM_CTLCOLOR??
- 在用双缓存显示位图时候,BoundsChecker检测出了debug下的奇怪问题
- 如何使工具条中的button失效
- 那位英雄给个用TransmitFile API发送和接收文件例子,小弟对此API一直不很理解,感激!
- 关于代码签名(要花钱的那种)
- 线程的区别
- 如何理解 int *(*menu())()---有请各路高手
- 谁有PCX和BMP互相转换的源代码?谢谢。
- 一个关于副线程向对话框窗口发送消息的问题。先以80分奉上,不够再加。
- 如何在richedit中用程序删除任意一行,插入一行等问题?
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap; // only paint the rect that needs repainting
CRect client;
pDC->GetClipBox(client);
//---------------------------------------------------不让它闪
if (!pDC->IsPrinting()) //如果没有使用打印机
{
// draw to offscreen bitmap for fast looking repaints
if (dc.CreateCompatibleDC(pDC)) //创建一个与其它设备相兼容的内存设备表,可在内存中准备图像
{
if (bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height())) //初始化一个与pDC相容的位图,作为PDC指定的设备相
//容的任何内存设备的当前位图
{
OnPrepareDC(&dc, NULL); //为打印预览调用ONDRAW OR ONPAINT 函数之前 pDrawDC = &dc; //CDC类的对象附值给CDC的指针 // offset origin more because bitmap is just piece of the whole drawing
dc.OffsetViewportOrg(-rect.left, -rect.top); //修改视口原点坐标
pOldBitmap = dc.SelectObject(&bitmap);
dc.SetBrushOrg(rect.left % 8, rect.top % 8); //指定下一个进入设备环境的画刷的原点坐标 // might as well clip to the same rectangle
dc.IntersectClipRect(client);
//当前区与指定区相交区创建的一个新的裁剪区。
}
}
}
//开始画图
void DrawTransparentBitmap(CDC *pDC, int x, int y, CBitmap &Bmp,
COLORREF crMask /* =RGB(255, 0, 255) */)
{BITMAP b;
Bmp.GetBitmap(&b);
int nWidth = b.bmWidth;
int nHeight = b.bmHeight;COLORREF crOldBack = pDC->SetBkColor(RGB(255,255,255));
COLORREF crOldText = pDC->SetTextColor(RGB(0,0,0));
CDC dcImage, dcTrans;
// Create two memory dcs for the image and the mask
dcImage.CreateCompatibleDC(pDC);
dcTrans.CreateCompatibleDC(pDC);// Select the image into the appropriate dc
CBitmap* pOldBitmapImage;
pOldBitmapImage = dcImage.SelectObject(&Bmp);
// Create the mask bitmap
CBitmap bitmapTrans;
bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL);// Select the mask bitmap into the appropriate dc
CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);// Build mask based on transparent colour
dcImage.SetBkColor(crMask);
dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);// Do the work - True Mask method - cool if not actual display
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
pDC->BitBlt(x, y, nWidth, nHeight, &dcTrans, 0, 0, SRCAND);
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);// Restore settings
dcImage.SelectObject(pOldBitmapImage);
dcTrans.SelectObject(pOldBitmapTrans);
pDC->SetBkColor(crOldBack);
pDC->SetTextColor(crOldText);
}
《Visual C++数字图像处理》 人民邮电出版社。
有介绍。对你的问题有很好的解释。