改变图像颜色。
一个灰度图像,每个像素取值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上