如何用纯色填充位图?

Sal*_*dor 38 c# image bitmap

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

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

有比这更快的方法SetPixel吗?提前致谢.

Jer*_*ine 54

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

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);
}
Run Code Online (Sandbox Code Playgroud)

  • @SanuelJackson所以你贬低了这个答案,因为它回答了OP的实际问题,而不是他问题的标题? (2认同)

小智 25

Bitmap bmp = new Bitmap(width, height);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Green);
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案。以我的经验,在清除整个图像时,“清除”比调用“ FillRectangle”更快。 (4认同)
  • 如果您阅读本文,请始终在使用位图或图形的任何操作周围使用 `using` 保护,否则对象将不会被正确处理。 (3认同)

Rya*_*ook 6

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

Graphics g = Graphics.FromImage(bitmap); 
Run Code Online (Sandbox Code Playgroud)

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

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

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