如何用纯色填充位图?

时间:2009-11-12 05:50:23

标签: c# image bitmap

我需要使用独特的RGB颜色创建一个24位位图(分辨率为100x100像素),并将生成的图像保存到磁盘。我目前使用SetPixel函数,但速度非常慢。

Bitmap Bmp = new Bitmap(width, height);
//...
//...
Bmp.SetPixel(x,y,Color.FromARGB(redvalue, greenvalue, bluevalue));

是否有比SetPixel更快的方法?提前谢谢。

8 个答案:

答案 0 :(得分:51)

这应该做你需要的。它将使用指定的颜色填充整个位图。

Bitmap Bmp = new Bitmap(width, height);
using (Graphics gfx = Graphics.FromImage(Bmp))
using (SolidBrush brush = new SolidBrush(Color.FromArgb(redvalue, greenvalue, bluevalue)))
{
    gfx.FillRectangle(brush, 0, 0, width, height);
}

答案 1 :(得分:20)

Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Green);

答案 2 :(得分:6)

这取决于你想要完成什么,但通常你会通过获取图形对象然后绘制它来使用GDI +:

Graphics g = Graphics.FromImage(bitmap); 

它实际上是一个很大的主题,这里有一些初学者教程:GDI+ Tutorials

以下是教程中关于使用渐变填充绘制矩形的片段。

Rectangle rect = new Rectangle(50, 30, 100, 100); 
LinearGradientBrush lBrush = new LinearGradientBrush(rect, Color.Red, Color.Yellow, LinearGradientMode.BackwardDiagonal); 
g.FillRectangle(lBrush, rect); 

答案 3 :(得分:3)

您可以使用LockBits来加速写入像素(指针访问而不是每个像素的方法调用)。

答案 4 :(得分:2)

你可以在这里选择: - )

使用GDI +的另一种方法是使用WPF(参见RenderTargetBitmap.Render。)

另见this question

答案 5 :(得分:2)

始终使用 区域 矩形)比使用单个像素快得多。

答案 6 :(得分:1)

创建尺寸s(高度,宽度)和颜色c。

的位图对象bmp
bmp=CreateBmp( c , s );

现在返回位图的CreateBmp方法:

Bitmap CreateBmp(Color c, Size s)
{
    Bitmap temp =new Bitmap(1,1);
    temp.SetPixel(1,1,c);
    return new Bitmap(temp, s);
}

答案 7 :(得分:0)

我建议查看GD库。

我很确定有一个c#库。 http://www.boutell.com/gd/