2010-06-11 119 views
3

如何从图形对象创建位图对象?我想从我的Graphics对象读取像素。例如,像System.Drawing.BitMap.GetPixel()。如何从Graphics对象创建位图对象?

我想找出一个PDF文档中的空白区域(全白色,或任何颜色),写一些图形/图像。我已经尝试过这样,但它不起作用。为什么下面的代码没有按预期工作?

// 
// System.Drawing.Bitmap 
// System.Drawing.Graphics 
// 
Bitmap b = new Bitmap(width, height, graphics); 

// 
// In this case, for any (i, j) values, Bitmap.GetPixel returns 0 
// 
int rgb = b.GetPixel(i, j).ToArgb(); 

回答

0

最好要避免GetPixel/SetPixel和使用不安全的访问方法的位图一些速度(在.NET的唯一方面再次发布此问题,删除其他库的依赖)。

System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);

然后使用图形实例。如果我记得,修改图形对象会修改位图。

+0

感谢您的回复,MaLio。请在上面找到我的评论(回复Belousov Pavel)。 – 2010-06-14 05:20:42

0

首先,您应该创建位图,然后从该位图创建图形,使用图形,然后保存(或使用它)位图。

您的代码将是这样的:

using (Bitmap image = new Bitmap(X, Y)) 
{ 
    using (Graphics gr = Graphics.FromImage(image)) 
    { 
     // work with graphics, Draw objects 
    } 
    image.Save("YourPathToFile"); // Or GetPixel, if you want 
} 

您的代码不工作,你除外,因为位图的构造变得只有图形解决。 MSDN告诉Initializes a new instance of the Bitmap class with the specified size and with the resolution of the specified Graphics object.

+0

感谢您的回复,Belousov。 - 我已经有一个图形对象,从pdf构建(并且,我没有相应的位图对象,因为渲染不是我的pdf库的兴趣)。我只想从中读取像素,而我不想写入/绘制它。我需要位图对象来读取像素,所以我试图从图形对象中构建位图对象。 - 虽然写入System.Drawing.Graphics对象非常容易,但从中读取像素是故意不可能的。 – 2010-06-14 05:15:28

0

(很晚了,但是......)

你试过

var bmp = System.Drawing.Bitmap.FromHbitmap(gr.GetHdc()); 

然后你可以从bmp读取的像素。

+1

对我而言,会引发System.Runtime.InteropServices.ExternalException。 – Michael 2016-05-19 13:20:01

+0

引发“GDI +中发生的一般错误” – 2017-06-27 14:15:03