我需要使用独特的RGB颜色创建24位位图(分辨率为100x100像素),并将生成的图像保存到磁盘。我目前使用的功能是SetPixel
,但速度非常慢。如何用纯色填充位图?
Bitmap Bmp = new Bitmap(width, height);
//...
//...
Bmp.SetPixel(x,y,Color.FromARGB(redvalue, greenvalue, bluevalue));
有没有比SetPixel
更快的方法?提前致谢。
我需要使用独特的RGB颜色创建24位位图(分辨率为100x100像素),并将生成的图像保存到磁盘。我目前使用的功能是SetPixel
,但速度非常慢。如何用纯色填充位图?
Bitmap Bmp = new Bitmap(width, height);
//...
//...
Bmp.SetPixel(x,y,Color.FromARGB(redvalue, greenvalue, bluevalue));
有没有比SetPixel
更快的方法?提前致谢。
这应该做你所需要的。它将用指定的颜色填充整个位图。
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);
}
这取决于你所要完成的是什么,但通常你会使用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);
1为GDI +建议。 – Salvador 2009-11-13 01:05:10
你可以使用LockBits用来加快写像素(指针访问而不是每个像素方法调用)。
我建议查看GD库。
我确定有一个c#库。 http://www.boutell.com/gd/
总是地区(矩形)工作比使用单个像素快得多。
Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Green);
你能否提供给我们更多与你的答案有关的细节。谢谢 – Robert 2017-02-20 20:05:00
这是这里最好的答案。根据我的经验,当清除整个图像时,“清除”比调用“FillRectangle”要快。 – 2017-05-19 10:44:33
图形_ **清除** _方法清除整个图面并用指定的背景色填充。没有必要手动填充它,这是_ ** clear ** _方法具有的选项。请看[msdn](https://msdn.microsoft.com/en-us/library/system.drawing.graphics.clear(v = vs.110).aspx)解释。 – 2017-06-27 04:25:45
创建大小为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);
}
非常感谢。 – Salvador 2009-11-13 01:04:35
这显示了如何从另一个位图制作位图。 – 2016-03-31 23:36:26
@SanuelJackson所以你低估了这个答案,因为它回答了OP的实际问题,而不是他的问题的标题? – 2016-04-01 13:39:46