我正在使用色彩填充Bitmap
:
// Assume we have something like:
// Bitmap bitmap = new Bitmap(3, 2, PixelFormat.Format32bppArgb);
using (SolidBrush b = new SolidBrush(color))
{
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(Bitmap))
{
g.FillRectangle(b, 0, 0, Bitmap.Width, Bitmap.Height);
}
}
然而,当我执行
Bitmap.GetPixel(0, 0)
这样的操作时,它会返回一个非常接近但并不完全相同的颜色。如果我将Color
的Alpha通道降低到足够低,RGB颜色通道就会为零。例如,使用Color.FromArgb(1, 2, 3, 4)
作为刷子颜色将产生一幅由1, 0, 0, 0
组成的位图。如果我使用Color.FromArgb(11, 22, 33, 44)
,那么我得到的位图颜色将如11, 22, 22, 44
一般。因此,我的单元测试正在失败,因为我无法得到直接匹配。
我是否有办法快速填充整个矩形以提供精确的纯色?速度很重要,在程序中需要进行一些热循环,因此不可能使用Bitmap.SetPixel(...)
。除非没有其他方法,否则我不想使用unsafe
。
using System;
using System.Drawing;
using System.Drawing.Imaging;
public class Program
{
public static void Main()
{
Bitmap Bitmap = new Bitmap(3, 2, PixelFormat.Format32bppArgb);
using (SolidBrush b = new SolidBrush(Color.FromArgb(1, 2, 3, 4)))
{
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(Bitmap))
{
g.FillRectangle(b, 0, 0, Bitmap.Width, Bitmap.Height);
}
}
var pixel = Bitmap.GetPixel(0, 0);
Console.WriteLine(pixel);
}
}
PixelOffsetMode
的所有设置(根据其他SO帖子,实际上只有两个,但我为了确保尝试了所有设置),但都没有成功,然后尝试了将SmoothingMode
与PixelOffsetMode
组合使用,但仍然无济于事。我还缺少哪些东西? - Water