2009-11-12 77 views
27

我需要使用独特的RGB颜色创建24位位图(分辨率为100x100像素),并将生成的图像保存到磁盘。我目前使用的功能是SetPixel,但速度非常慢。如何用纯色填充位图?

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

有没有比SetPixel更快的方法?提前致谢。

回答

40

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

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); 
} 
+0

非常感谢。 – Salvador 2009-11-13 01:04:35

+0

这显示了如何从另一个位图制作位图。 – 2016-03-31 23:36:26

+2

@SanuelJackson所以你低估了这个答案,因为它回答了OP的实际问题,而不是他的问题的标题? – 2016-04-01 13:39:46

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

1为GDI +建议。 – Salvador 2009-11-13 01:05:10

3

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

2

总是地区矩形)工作比使用单个像素快得多。

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

你能否提供给我们更多与你的答案有关的细节。谢谢 – Robert 2017-02-20 20:05:00

+0

这是这里最好的答案。根据我的经验,当清除整个图像时,“清除”比调用“FillRectangle”要快。 – 2017-05-19 10:44:33

+0

图形_ **清除** _方法清除整个图面并用指定的背景色填充。没有必要手动填充它,这是_ ** clear ** _方法具有的选项。请看[msdn](https://msdn.microsoft.com/en-us/library/system.drawing.graphics.clear(v = vs.110).aspx)解释。 – 2017-06-27 04:25:45

0

创建大小为s(高度,宽度)和颜色的位图对象bmp c。

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