日期:2014-05-18  浏览次数:21006 次

改变图像颜色。
一个灰度图像,每个像素取值0~255,现在想把大于1的像素点都变成红色半透明。其他都变成全透明。
下面是我写的代码。可以实现,但效率很慢,640*480的图像要很长时间。有没有其他办法快一点?

 for (int y = 0; y < InImage.Height; y++)
{
  for (int x = 0; x < InImage.Width; x++)
  {
  Color color = InImage.GetPixel(x, y);

  if (color.R > 1)
  {
  Color outColor = Color.FromArgb(255/2, 255, 0, 0);

  tempImage.SetPixel(x, y, outColor);
  }
  else
  {
  Color outColor = Color.FromArgb(0, color.R, color.G, color.B);

  tempImage.SetPixel(x, y, outColor);
  }
  }
}

------解决方案--------------------
Color redColor = Color.FromArgb(255/2, 255, 0, 0); 
Color whiteColor = Color.FromArgb(0, color.R, color.G, color.B);
Color color;
for (int y = 0; y < InImage.Height; y++) 

 for (int x = 0; x < InImage.Width; x++) 

color = InImage.GetPixel(x, y); 

if (color.R > 1) 

tempImage.SetPixel(x, y, redColor ); 

else 

tempImage.SetPixel(x, y, whiteColor ); 


}
------解决方案--------------------
Color redColor = Color.FromArgb(255/2, 255, 0, 0);
Color color; 
for (int y = 0; y < InImage.Height; y++)
{
 for (int x = 0; x < InImage.Width; x++)
{
color = InImage.GetPixel(x, y);

if (color.R > 1)
{
tempImage.SetPixel(x, y, redColor );
}
}
}
这样也行,^-^,再复杂的我就不会拉

------解决方案--------------------
lz最初的代码跑出来的效果是什么样的?
怎么感觉就是一片半红和白色的,或者说是粉红和白

这种要求或许可以用颜色转换矩阵(color matrix)来做,具体可以看MSDN上Recoloring Images的说明

我的英文版的位置是
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VisualStudio.v80.en/dv_fxmclignrl/html/f28c54fd-9c80-4f6f-b242-55f7ffcda84b.htm


后面的问题其实很容易,就是
g=Graphics.From(image)
g.DramImage(newImg)

------解决方案--------------------
就是要2个图层的吧,那就扔2个picture呗
------解决方案--------------------
1.打开原始图片 
Image imageTemp = Bitmap.FromFile("...");
Image oldImage = new Bitmap(imageTemp);
imageTemp.Dispose();
GC.Collect();
以上过程写在一个方法中
2.new 一个image Image newImage = new Bitmap(oldImage.Width,oldImage.Height);
3.先绘制原来的
Griphics g = Griphisc.FromImage(newImage);
g.DrawImage(oldImage);
4.再绘制你所进行的任何处理
g.DrawImage(afterDealImage);
5.然后这个newImage进行保存
newImage.Save("...",ImageType);
6.然后你的pictureBox.Image = newImage 或将绘制在pictureBox上