这是我试图解决的高级问题......
我有第三方绘图/绘图(IoComp Plot),我想在另一个第三方报告创建的报告中嵌入Plot控件的高质量(至少600 dpi)位图包(Combit List& Label)。
这种方法到目前为止似乎最有希望......
---编辑---:
在尝试了许多其他方法之后,我认为唯一可以使用的方法是创建一个隐藏的Plot控件实例,所有内容都扩展到打印机尺寸(大约是屏幕尺寸的5倍)。这包括宽度和高度,字体大小,线宽 - 控件的每个可见组件。呸!
------
我可以从绘图控件的PrintPage事件中获得正确分辨率的 Graphics 对象,但是将其转换为Bitmap以使报表包很高兴被证明是主要的绊脚石。几个小时的搜索导致其他人提出同样的问题,但没有可行的答案。
我发现的唯一有希望的导致建议使用一个Bitmap构造函数,它将Graphics实例作为参数。
然而,这对我不起作用。它创建了Bitmap,但没有来自Plot控件的内容 - 它是纯黑色图像。
这是我的代码(编辑后显示图形对象的红线图):
void PrintDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// Draw a red line on the Graphics object. When printed, this
// line is shown as part of the normal Plot graphics.
Pen myPen;
myPen = new Pen(Color.Red);
e.Graphics.DrawLine(myPen, 0, 0, 200, 200);
myPen.Dispose();
// Create a bitmap from the Graphics object
Bitmap bm = new Bitmap(1000, 1000, e.Graphics);
// Save to disk
// DOES NOT WORK - CREATES FILE THAT IS PURE BLACK (VIEWED
// WITH "PAINT" PROGRAM)
bm.Save(@"C:\Bicw_Dev\Bic.Net\FrontEnd\GraphicsToBmp.bmp", ImageFormat.Bmp);
bm.Dispose();
}
任何人都可以建议为什么这不起作用?这甚至是一种有效的方法吗?
另外,请注意:
据我所知(我花了很多时间看)没有办法直接从Plot控件获得高分辨率,打印质量的Bitmap !
我强调这一点,因为其他几个问这个问题的人得到了代码样本,以解决相反的问题 - 将Bitmap转换为Graphics。
我需要将图形对象转换为位图对象。
如果有人可以建议一种替代方法,让我能够将我的情节的打印质量图像添加到我的报告中,请随意。 (例如,我可以从Plot控件中获得低质量(72 bpi)位图,并考虑尝试拉伸它 - 但我从未见过这种方法在其他应用程序中运行良好)。
谢谢,
-Tom Bushell
编辑以回应评论:
作为实验,我添加了以下内容:
Pen myPen;
myPen = new Pen(Color.Red);
e.Graphics.DrawLine(myPen, 0, 0, 200, 200);
myPen.Dispose();
当我打印我的情节时,这会在绘图图形上绘制一条红线。但它对Bitmap没有影响 - 它仍然是纯黑色。
答案 0 :(得分:1)
然而,这对我不起作用。它 创建Bitmap,但没有内容 来自Plot控件 - 它是纯粹的 黑色图像。
嗯,你永远不会对图形进行绘画,你期待什么?
您可以在该事件中为输出执行实际绘图。
答案 1 :(得分:1)
您正在使用的构造函数不会复制任何图形,只会将分辨率设置为等于图形分辨率。见msdn。正如Leppie指出的那样,你必须在位图上绘制一些东西。我建议为刚刚创建的项目获取另一个图形对象。
Graphics g = Graphics.FromImage(bmp);
//Make the background white
g.FillRectangle(Brushes.White, 0, 0, 1000, 1000);
答案 2 :(得分:1)
在打印(预览)系统中控制DPI并不容易。
但也许你会以错误的方式去做。你想要的是创建一个(大)位图,然后“控制”控件使用该位图,就好像它是屏幕一样。见this list of links。
不需要PrintDocument。