日期:2014-05-17  浏览次数:21054 次

GDI+如何处理路径弄出来的不规则区域的图片像素
本帖最后由 nabasasun 于 2013-03-14 22:49:29 编辑
比如C++里,反色是这样弄的。
//反色
INT w = Image->GetWidth();
INT h = Image->GetHeight();

for(int i=0;i<w;i++)
{
  for(int j=0;j<h;j++)
   {

Image->GetPixel(i,j,&color);

int r=255-color.GetRed();
int g=255-color.GetGreen();
int b=255-color.GetBlue();

color_Temp.SetValue(color1.MakeARGB(255,r,g,b));

Image->SetPixel(i,j,color_Temp);

   }
}


但是只能应付矩形,不能应付不规则的区域。如何修改代码。
才能像PS那样处理不规则区域的图片(部分)反色,也就是下面的第2张图那样

这是规则的矩形

这是不规则的路径式反色

------解决方案--------------------
设置一个剪裁区域 ,SetClip(*),然后,在矩形中画就行了。

------解决方案--------------------
ps在拖动并刷区域的过程中,会记录笔刷刷过的区域的像素点坐标,然后不断地加入一个集合,在最终处理时,先判断要处理点是否在这个集合内,也就是笔刷刷过的范围内,如果是则处理,如果不是则不处理。至于那个有柔化边缘的,是用另一个数组记录笔刷边缘的透明度,处理时,如果指定坐标点在笔刷范围内,则处理反色时按另一个数组里记录到的该点的透明度处理。
------解决方案--------------------
使用GraphicsPath记录鼠标路径,和Region做异或,可以得到所需区域,
再做反色处理,然后画到背景图像上。