gpt4 book ai didi

c# - 如何以编程方式编辑 .png?

转载 作者:太空狗 更新时间:2023-10-29 21:46:18 26 4
gpt4 key购买 nike

我有 28 张图像,每张图像有 3 种尺寸(总共 84 张),它们都是单色的,每张图像都有不同的 alpha 层。我想让它们中的每一个都有 5 种不同的颜色。总共有 420 张图像。手动完成这显然是一个巨大的痛苦。我没有 Photoshop,所以任何类型的 photoshop 功能都不是有效的答案。我有 Paint.NET,但调整色调对我不起作用,因为单独更改色调不会给我想要的颜色。

基本上我需要做的是为图像中的每个像素获取 RGBA 值并将 RGB 替换为新的 RGB 值并保持相同的 A 值。

有人知道怎么做吗?我没有在 StackOverflow 或 Google 上搜索(可能使用了错误的搜索词)。

我更喜欢用 C# 或 VB.NET 的答案,但如果有人知道如何用任何语言做到这一点,也许我可以将它应用到 C# 或 VB.NET。

--编辑--

如果有人找到这个并正在寻找答案,这里是我根据 Yorye Nathan 的链接得到的。

private const int RED = 51;
private const int GREEN = 181;
private const int BLUE = 229;

private const int NEW_RED = 170;
private const int NEW_GREEN = 102;
private const int NEW_BLUE = 204;

private void Form1_Load(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{

Image OriginalImage = Image.FromFile(openFileDialog1.FileName);
Image NewImage = ColorFilter(OriginalImage);

pictureBox1.Image = OriginalImage;
pictureBox2.Image = NewImage;
}

}

public static Image ColorFilter(Image originalImage)
{
Bitmap newImage = new Bitmap(originalImage);
BitmapData originalData = (originalImage as Bitmap).LockBits(new Rectangle(0, 0, originalImage.Width, originalImage.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

BitmapData newData = (newImage as Bitmap).LockBits(new Rectangle(0, 0, originalImage.Width, originalImage.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);

int originalStride = originalData.Stride;
System.IntPtr originalScan0 = originalData.Scan0;

int newStride = newData.Stride;
System.IntPtr newScan0 = newData.Scan0;

unsafe
{
byte* pOriginal = (byte*)(void*)originalScan0;
byte* pNew = (byte*)(void*)newScan0;

int nOffset = originalStride - originalImage.Width * 4;

byte red, green, blue;

for (int y = 0; y < originalImage.Height; ++y)
{
for (int x = 0; x < originalImage.Width; ++x)
{
blue = pOriginal[0];
green = pOriginal[1];
red = pOriginal[2];

if (pOriginal[0] == BLUE && pOriginal[1] == GREEN && pOriginal[2] == RED)
{
pNew[0] = (byte)NEW_BLUE;
pNew[1] = (byte)NEW_GREEN;
pNew[2] = (byte)NEW_RED;
}

pOriginal += 4;
pNew += 4;
}
pOriginal += nOffset;
pNew += nOffset;
}
}
(originalImage as Bitmap).UnlockBits(originalData);
(newImage as Bitmap).UnlockBits(newData);
return newImage;
}

最佳答案

检查这个question出去。对像素的位替换进行一些调整,使其添加而不是替换它们,您就可以开始了。

关于c# - 如何以编程方式编辑 .png?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9865437/

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