gpt4 book ai didi

c# - 更改图像的颜色

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:26 26 4
gpt4 key购买 nike

我有一系列包含一种原色的图标。例如,我有一颗黄色的星星,其透明背景已消除锯齿。

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

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

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

最佳答案

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

http://www.codeproject.com/Articles/1989/Image-Processing-for-Dummies-with-C-and-GDI-Part-1

本指南向您展示了如何使用不安全代码访问图像数据。我更愿意保持代码安全并使用如下替代方法:

        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);

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

关于c# - 更改图像的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949968/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com