gpt4 book ai didi

c# - 在 Windows 窗体中保存带有 alpha channel 的单色位图会保存另一种(错误的)颜色

转载 作者:行者123 更新时间:2023-11-30 15:41:19 25 4
gpt4 key购买 nike

在 C#、.NET 2.0、Windows 窗体、Visual Studio Express 2010 中,我正在保存由相同颜色组成的图像:

  Bitmap bitmap = new Bitmap(width, height, PixelFormat.Format32bppArgb);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
Brush brush = new SolidBrush(color);
graphics.FillRectangle(brush, 0, 0, width, height);
brush.Dispose();
}

bitmap.Save("test.png");
bitmap.Save("test.bmp");

如果我正在使用,例如

颜色 [A=153, R=193, G=204, B=17] 或 #C1CC11

在我保存图像并在外部查看器(如 Paint.NET、IrfanView、XNView 等)中打开它之后。我被告知图像的颜色实际上是:

颜色 [A=153, R=193, G=203, B=16] 或 #C1CB10

所以它是相似的颜色,但不一样!

我尝试同时保存 PNG 和 BMP。

当涉及透明度 (alpha) 时,.NET 会保存不同的颜色!当 alpha 为 255(无透明度)时,它会保存相应的颜色。

最佳答案

谢谢 Joe 和 Hans Passant 的评论。

是的,正如乔所说,问题就在于此:

graphics.FillRectangle(brush, 0, 0, width, height);

这里GDI+用相似的颜色修改颜色,但不是完全相同的颜色。

似乎解决方案是使用 Bitmap.LockBits 和 Marshal.Copy 将颜色值直接写入像素:

        Bitmap bitmap = new Bitmap(this.currentSampleWidth, this.currentSampleHeight, PixelFormat.Format32bppArgb);

// Lock the bitmap's bits.
Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
BitmapData bmpData = bitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, bitmap.PixelFormat);

// Get the address of the first line.
IntPtr ptr = bmpData.Scan0;

// Declare an array to hold the bytes of the bitmap (32 bits per pixel)
int pixelsCount = bitmap.Width * bitmap.Height;
int[] argbValues = new int[pixelsCount];

// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(ptr, argbValues, 0, pixelsCount);

// Set the color value for each pixel.
for (int counter = 0; counter < argbValues.Length; counter++)
argbValues[counter] = color.ToArgb();

// Copy the RGB values back to the bitmap
System.Runtime.InteropServices.Marshal.Copy(argbValues, 0, ptr, pixelsCount);

// Unlock the bits.
bitmap.UnlockBits(bmpData);

return bitmap;

关于c# - 在 Windows 窗体中保存带有 alpha channel 的单色位图会保存另一种(错误的)颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8507545/

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