如题,将小图像中心指定的圆形区域直接覆盖到大图像中,而圆形区域之外的其它图像与大图像渐变融合,看不出两幅图像的边界(或使边界模糊)希望高手们能理解我的意思,呵呵。多谢了哦……

解决方案 »

  1.   

    中间直接替换,外边调RGB的比例相加?
      

  2.   

    To ataberman:
    我是这样想的,关键是如何对外边的RGB调比例?这是比较晕的问题,呵呵。
      

  3.   

    哈哈……skinfeature,你这是什么答案呢?就贴了个URL算完事?呵呵,我有点晕……
      

  4.   

    设置单个象素的alpha值 下面的例子显示了如何改变单个象素的alpha值。该代码实际改变了位图对象中单个点的alpha信息。这种方法比采用颜色矩阵和ImageAttributes对象的方法要慢很多,但是允许你控制位图的单个象素。
    INT iWidth = bitmap.GetWidth();
    INT iHeight = bitmap.GetHeight();
    Color color, colorTemp;
    for(INT iRow = 0; iRow < iHeight; iRow++)
    {
       for(INT iColumn = 0; iColumn < iWidth; iColumn++)
       {
          bitmap.GetPixel(iColumn, iRow, &color);
          colorTemp.SetValue(color.MakeARGB(
             (BYTE)(255 * iColumn / iWidth), 
             color.GetRed(),
             color.GetGreen(),
             color.GetBlue()));
          bitmap.SetPixel(iColumn, iRow, colorTemp);
       }
    }
    // First draw a wide black line.
    Pen pen(Color(255, 0, 0, 0), 25);
    graphics.DrawLine(&pen, 10, 35, 200, 35);
    // Now draw the modified bitmap.
    graphics.DrawImage(&bitmap, 30, 0, iWidth, iHeight);
    上例中采用了嵌套循环来改变位图中每个象素的alpha值。对于每个象素,Bitmap::GetPixel获取其当前颜色,Color::SetValue创建一个包含新的alpha值得临时颜色值,然后Bitmap::SetPixel设置这个新的颜色。Alpha值的设定取决于位图的列。第一列的alpha值为0,最末一列的alpha值为255。因此结果图片看起来左边完全透明而右边完全不透明。
    Bitmap::GetPixel和Bitmap::SetPixel使你可以控制单个象素的值。然而,使用这两个方法没有使用ImageAttributes类和颜色矩阵处理速度快。
      

  5.   

    最后只能用SetPixel了……虽然要慢点……不过,谁能解释一下为什么使用ImageAttributes比SetPixel快呢?