none
如何将图片加灰效果 RRS feed

  • 问题

  • 如何将一张图片整体加灰,就像QQ截屏那样点了截屏按钮,其实是一张整屏图片,只是把正屏图片处理了一下变灰效果,整个变灰效果如何做的?
    2010年1月14日 2:59

答案

  • 这样可以变灰
    参照:
    http://heisetoufa.javaeye.com/blog/315505
    region 改变图片颜色   
      
    /// <summary>   
    /// 改变图片的颜色   
    /// </summary>   
    /// <param name="filePath">图片的完整路径</param>   
    /// <param name="colorIndex">改变的颜色,</param>   
    public void update_pixelColor(string filePath, bool colorIndex)   
    {   
        Bitmap bmp = new Bitmap(Bitmap.FromFile(filePath));   
      
        int value = 0;   
      
        for (int i = 0; i < bmp.Height; i++)   
        {   
            for (int j = 0; j < bmp.Width; j++)   
            {   
                if (colorIndex)   
                    value = this.GetGrayNumColor(bmp.GetPixel(j, i));   
                else  
                    value = this.GetHongNumColor(bmp.GetPixel(j, i));   
      
                bmp.SetPixel(j, i, Color.FromArgb(value, value, value));   
            }   
        }   
      
        bmp.Save("c:\\2.jpg");   
    }   
      
    /// <summary>   
    /// 获取彩色单点像素   
    /// </summary>   
    /// <param name="posClr">单点像素</param>   
    /// <returns>int</returns>   
    private int GetHongNumColor(Color posClr)   
    {   
        return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;   
    }   
      
    /// <summary>   
    /// 获取灰色单点像素   
    /// </summary>   
    /// <param name="posClr">单点像素</param>   
    /// <returns>Color</returns>   
    private int GetGrayNumColor(Color posClr)   
    {   
        //要改变ARGB   
        return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;   
    }  
     
    #endregion 改变图片颜色  
    

    努力+方法=成功
    • 已建议为答案 生鱼片 2010年1月17日 10:35
    • 已标记为答案 YiChun Chen 2010年1月18日 10:24
    2010年1月14日 6:10

全部回复

  • 图片效果
    你参照下这里http://www.cnblogs.com/xiaosuo/archive/2009/12/17/1626445.html

     private void button2_Click(object sender, EventArgs e)
            {
                //以黑白效果显示图像       
                try            {             
                    int Height = this.pictureBox1.Image.Height;             
                    int Width = this.pictureBox1.Image.Width;           
                    Bitmap newBitmap = new Bitmap(Width, Height);               
                    Bitmap oldBitmap = (Bitmap)this.pictureBox1.Image;                
                    Color pixel;           
                    for (int x = 0; x < Width; x++)                  
                        for (int y = 0; y < Height; y++)                
                        {                        
                            pixel = oldBitmap.GetPixel(x, y);                    
                            int r, g, b, Result = 0;                   
                            r = pixel.R;                      
                            g = pixel.G;                    
                            b = pixel.B;                       
                    //实例程序以加权平均值法产生黑白图像                       
                           int iType =2;                       
                         switch (iType)                    
                         {                         
                        case 0://平均值法                            
                            Result = ((r + g + b) / 3);                            
                            break;                   
                        case 1://最大值法                           
                            Result = r > g ? r : g;                        
                            Result = Result > b ? Result : b;                        
                            break;                   
                        case 2://加权平均值法                          
                            Result = ((int)(0.7 * r) + (int)(0.2 * g) + (int)(0.1 * b));                         
                            break;                   
                          }                      
                            newBitmap.SetPixel(x, y, Color.FromArgb(Result, Result, Result));            
                        }         
                    this.pictureBox1.Image = newBitmap;           
                }        
                catch (Exception ex)      
                {           
                    MessageBox.Show(ex.Message, "信息提示");         
                }
    
    
            }
    
    参照下这里http://social.microsoft.com/Forums/zh-CN/2212/thread/2aee590b-4bfa-4ad2-83e0-14047ddb0a0e

    努力+方法=成功
    2010年1月14日 3:06
  • 开心,上面的效果不行呀,运行时间长,而且效果不对,都黑白了。

    而且即使我加上黑白:当我开始截的时候,马上就还原回去了。
    2010年1月14日 5:38
  • 你如果想实现类似QQ的截图,

    参照这里
    http://hi.baidu.com/cm123___/blog/item/2df4221d4ed312c1a78669bb.html


    努力+方法=成功
    2010年1月14日 5:50
  • 这样可以变灰
    参照:
    http://heisetoufa.javaeye.com/blog/315505
    region 改变图片颜色   
      
    /// <summary>   
    /// 改变图片的颜色   
    /// </summary>   
    /// <param name="filePath">图片的完整路径</param>   
    /// <param name="colorIndex">改变的颜色,</param>   
    public void update_pixelColor(string filePath, bool colorIndex)   
    {   
        Bitmap bmp = new Bitmap(Bitmap.FromFile(filePath));   
      
        int value = 0;   
      
        for (int i = 0; i < bmp.Height; i++)   
        {   
            for (int j = 0; j < bmp.Width; j++)   
            {   
                if (colorIndex)   
                    value = this.GetGrayNumColor(bmp.GetPixel(j, i));   
                else  
                    value = this.GetHongNumColor(bmp.GetPixel(j, i));   
      
                bmp.SetPixel(j, i, Color.FromArgb(value, value, value));   
            }   
        }   
      
        bmp.Save("c:\\2.jpg");   
    }   
      
    /// <summary>   
    /// 获取彩色单点像素   
    /// </summary>   
    /// <param name="posClr">单点像素</param>   
    /// <returns>int</returns>   
    private int GetHongNumColor(Color posClr)   
    {   
        return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;   
    }   
      
    /// <summary>   
    /// 获取灰色单点像素   
    /// </summary>   
    /// <param name="posClr">单点像素</param>   
    /// <returns>Color</returns>   
    private int GetGrayNumColor(Color posClr)   
    {   
        //要改变ARGB   
        return (posClr.R * 19595 + posClr.G * 38469 + posClr.B * 7472) >> 16;   
    }  
     
    #endregion 改变图片颜色  
    

    努力+方法=成功
    • 已建议为答案 生鱼片 2010年1月17日 10:35
    • 已标记为答案 YiChun Chen 2010年1月18日 10:24
    2010年1月14日 6:10