C#中的图像着色

时间:2015-09-23 12:14:44

标签: c# graphics gdi+ imaging

我希望在C#中重新着色图像,以便保留真实图像(就像我们在任何照片编辑器中一样)。我试图这样做但没有用。在这方面有人可以帮助我......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;

namespace Images
{
class Program
{
    static void Main(string[] args)
    {
        try 
        {
            Bitmap img = new Bitmap(@"D:\Image\Chrysanthemum.jpg");
            Bitmap NewImage = new Bitmap(img,img.Width,img.Height);
            for (int i = 0; i < img.Width; i++)
            {

                for (int j = 0; j < img.Height; j++)
                {
                    {

                        NewImage.SetPixel(i, j,Color.FromArgb(0,0,240,0));

                    }
                 }
            }
             NewImage.MakeTransparent();

                            NewImage.Save(@"D:\Image\1",System.Drawing.Imaging.ImageFormat.Jpeg);

           }
        catch(System.Exception exc)
        {
            Console.Write(exc);
        }
    }

   }
   }

2 个答案:

答案 0 :(得分:0)

如果您想进行颜色调制,正确的方法是迭代图像的每个像素,将RGB值表示为来自{{float的{​​{1}} 1}}到0.0f,然后将>乘以您想要的颜色。

1.0f

输入: in

输出: out

答案 1 :(得分:0)

您正在做的只是创建与原始图像大小相同的第二张图像。第二个图像填充了绿色(但没有alpha - 因此它只是透明的)。我怀疑你希望方法MakeTransparent()重新着色原始图像,但事实并非如此。此方法只会使某种颜色的像素透明。这不是图像的不透明度。

所以这些是两个图像 - 一个在另一个旁边,它们彼此无关(除了相同的大小)。

因此,您可以直接操作img变量中的图像(您可以将其复制以保留原始图像),方法是从Graphics创建一个img对象,您可以使用该对象进行绘制图像上的半透明颜色。

using (var gfx = Graphics.FromImage(img))
{
    using (var brush = new SolidBrush(MYCOLOR)
        gfx.FillRect(brush, MYRECT)
}

但我会坚持要求您使用图像处理库进行您想要实现的图像处理。所以请检查免费imageprocessor.org。他们的hue filter可能就是你想拥有的。