Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改图像';s颜色_C#_C# 4.0 - Fatal编程技术网

C# 更改图像';s颜色

C# 更改图像';s颜色,c#,c#-4.0,C#,C# 4.0,我有一系列包含一种原色的图标。例如,我有一个黄色的星,背景透明,抗锯齿 有没有办法改变色调或饱和度,将图像改为紫色 我使用的是C#4.0,我不在乎解决方案是GDI+还是WPF。我一直在使用System.Drawing.Image读取文件,但我不一定需要继续这样做。这些图像相对较小,小于100x100,我希望颜色是动态的,因此仅编辑图像本身以制作一组副本并不是一个真正的解决方案 有ColorMatrix类,但我不确定如何使用它从一种颜色转换为另一种颜色。仅仅使rgb值不同看起来相当容易,但如何在颜

我有一系列包含一种原色的图标。例如,我有一个黄色的星,背景透明,抗锯齿

有没有办法改变色调或饱和度,将图像改为紫色

我使用的是C#4.0,我不在乎解决方案是GDI+还是WPF。我一直在使用System.Drawing.Image读取文件,但我不一定需要继续这样做。这些图像相对较小,小于100x100,我希望颜色是动态的,因此仅编辑图像本身以制作一组副本并不是一个真正的解决方案


有ColorMatrix类,但我不确定如何使用它从一种颜色转换为另一种颜色。仅仅使rgb值不同看起来相当容易,但如何在颜色之间进行转换?

请点击此链接,以获得有关C#图像处理的精彩指南。如果您浏览提交该指南的用户,您可以找到该指南的全部6个部分

本指南介绍如何使用不安全代码访问图像数据。我更喜欢保持代码的安全性,并使用以下替代方法:

        Bitmap b = new Bitmap(img1);
        BitmapData bitmapData = b.LockBits(
            new Rectangle(0, 0, b.Width, b.Height),
            ImageLockMode.ReadWrite,
            PixelFormat.Format24bppRgb
        );

        int numPixels = b.Width * b.Height;
        byte[] pixels = new byte[numPixels * 3]; // 3 bytes per pixel

        Marshal.Copy(bitmapData.Scan0, pixels, 0, pixels.Length);

        // Use this method to apply an effect to each pixel individually
        for (int i = 0; i < pixels.Length; i++)
        {
            byte value = pixels[i];
            // modify value
            pixels[i] = value;
        }

        // Use this method to apply an effect that considers RGB relationship
        byte red, green, blue;

        for (int i = 0; i < pixels.Length; i += 3)
        {
            blue = pixels[i];
            green = pixels[i + 1];
            red = pixels[i + 2];

            // modify values

            pixels[i] = blue;
            pixels[i + 1] = green;
            pixels[i + 2] = red;
        }

        Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length);

        b.UnlockBits(bitmapData);
Bitmap b=新位图(img1);
BitmapData BitmapData=b.LockBits(
新矩形(0,0,b.宽度,b.高度),
ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb
);
整数像素=b.宽度*b.高度;
字节[]像素=新字节[numPixels*3];//每像素3字节
复制(bitmapData.Scan0,像素,0,像素,长度);
//使用此方法可分别对每个像素应用效果
对于(int i=0;i

每种不同的图像处理技术都不是C#特有的。对算法有了基本的了解后,您应该能够将其应用于此代码。

通过此链接可以获得有关C#中图像处理的精彩指南。如果您浏览提交该指南的用户,您可以找到该指南的全部6个部分

本指南介绍如何使用不安全代码访问图像数据。我更喜欢保持代码的安全性,并使用以下替代方法:

        Bitmap b = new Bitmap(img1);
        BitmapData bitmapData = b.LockBits(
            new Rectangle(0, 0, b.Width, b.Height),
            ImageLockMode.ReadWrite,
            PixelFormat.Format24bppRgb
        );

        int numPixels = b.Width * b.Height;
        byte[] pixels = new byte[numPixels * 3]; // 3 bytes per pixel

        Marshal.Copy(bitmapData.Scan0, pixels, 0, pixels.Length);

        // Use this method to apply an effect to each pixel individually
        for (int i = 0; i < pixels.Length; i++)
        {
            byte value = pixels[i];
            // modify value
            pixels[i] = value;
        }

        // Use this method to apply an effect that considers RGB relationship
        byte red, green, blue;

        for (int i = 0; i < pixels.Length; i += 3)
        {
            blue = pixels[i];
            green = pixels[i + 1];
            red = pixels[i + 2];

            // modify values

            pixels[i] = blue;
            pixels[i + 1] = green;
            pixels[i + 2] = red;
        }

        Marshal.Copy(pixels, 0, bitmapData.Scan0, pixels.Length);

        b.UnlockBits(bitmapData);
Bitmap b=新位图(img1);
BitmapData BitmapData=b.LockBits(
新矩形(0,0,b.宽度,b.高度),
ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb
);
整数像素=b.宽度*b.高度;
字节[]像素=新字节[numPixels*3];//每像素3字节
复制(bitmapData.Scan0,像素,0,像素,长度);
//使用此方法可分别对每个像素应用效果
对于(int i=0;i
每种不同的图像处理技术都不是C#特有的。对算法有了基本的了解,您应该能够将其应用于此代码。

我用这个代码来改变所有的海洋和海洋的颜色。。。 也许时间会长一点,但我想这会帮助你

首先,我得到noktalar列表中的所有像素

List<Nokta> noktalar = new List<Nokta>();


Bitmap bm = new Bitmap(pictureBox1.Image);
for (int i = 0; i < pictureBox1.Height; i++)
{
     for (int j = 0; j < pictureBox1.Width; j++)
     {
          Color col = bm.GetPixel(j, i);
          Nokta n = new Nokta();
          n.point.X = j;
          n.point.Y = i;
          n.renk = col;
          noktalar.Add(n);
     }
}
最后改变颜色

public void changeDenizColor(Color c)
{
     Bitmap bitmap = new Bitmap(pictureBox1.Image);
     foreach (Nokta n in deniz)
     {
         n.renk = c;
         bitmap.SetPixel(n.point.X, n.point.Y, c);
         pictureBox1.Image = bitmap;
     }
}

我用这个代码来改变所有的海洋和海洋的颜色。。。 也许时间会长一点,但我想这会帮助你

首先,我得到noktalar列表中的所有像素

List<Nokta> noktalar = new List<Nokta>();


Bitmap bm = new Bitmap(pictureBox1.Image);
for (int i = 0; i < pictureBox1.Height; i++)
{
     for (int j = 0; j < pictureBox1.Width; j++)
     {
          Color col = bm.GetPixel(j, i);
          Nokta n = new Nokta();
          n.point.X = j;
          n.point.Y = i;
          n.renk = col;
          noktalar.Add(n);
     }
}
最后改变颜色

public void changeDenizColor(Color c)
{
     Bitmap bitmap = new Bitmap(pictureBox1.Image);
     foreach (Nokta n in deniz)
     {
         n.renk = c;
         bitmap.SetPixel(n.point.X, n.point.Y, c);
         pictureBox1.Image = bitmap;
     }
}

@DanielA.White:我现在已经把setPixel()方法拼凑起来了,但是太长了。@DanielA.White:我现在把setPixel()方法拼凑起来了,但是太长了。