急另,有没有绘图方面的好的资料介绍????

解决方案 »

  1.   

    有一个老外编的函数BitmaptoRgn()vckbase上的一个例子里有!
      

  2.   

    CDC dc;
    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);
    //当前区与指定区相交区创建的一个新的裁剪区。
    }
    }
    }
             //开始画图
      

  3.   

    画位图(有透明效果,不带背景色crMask )
    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);
    }
      

  4.   

    这要用到图像增强技术。  自定义一个模板类似高斯模板。
    《Visual C++数字图像处理》 人民邮电出版社。
        有介绍。对你的问题有很好的解释。