.Net 4.7.2. Winforms.
呈现充满文本和图形的复杂页面。我用的是位图。然后,我通过调整PictureBox的大小并将其放置到一个滚动面板中,在预览窗口中显示它。
它可以完美地工作到位图,当然除了它需要的2GB RAM。因此,现在我正试图去一个元文件,以保存RAM,并希望使一些可扩展的。然而,当我这样做时,预览代码在Width. GET上显示“参数无效”。这在ShowDialog上发生在“预览”窗口中。
我已验证图元文件未被意外释放。它仍然存在,并作为byref参数传入预览窗口。
下面是代码:
' In the button event handler to create the file
Dim gr As Graphics = Me.CreateGraphics()
Dim hdc As IntPtr = gr.GetHdc()
' [snip irrelevant code]
Try
' [snip irrelevant code]
' [pagewidth and pageheight are paper size in inches * DPI chosen = pixels]
_pedWMF = New Metafile(hdc,
New Rectangle(0, 0, pageWidth, pageHeight),
MetafileFrameUnit.Pixel)
_PedigreeCanvas = Graphics.FromImage(_pedWMF)
_PedigreeCanvas.PageUnit = GraphicsUnit.Pixel
' [snip irrelevant code]
' Text and images rendered in this call
RenderPedigree(PedigreeCanvas)
' [snip irrelevant code]
' Call to preview window to show dialog.
下面是预览中的代码...
Private Sub LayoutPreviewImage()
_iPageWidth = Convert.ToInt32(Me.DeviceDpi * (Convert.ToDouble(_drvPaperSize("PS_WIDTH")) / 100))
_iPageHeight = Convert.ToInt32(Me.DeviceDpi * (Convert.ToDouble(_drvPaperSize("PS_HEIGHT")) / 100))
SuspendLayout()
Dim p As New PictureBox()
p.Name = "pbPreview"
p.Width = _iPageWidth
p.Height = _iPageHeight
'*** The _wmfPreview variable is properly initialized with the Metafile created above.
If _wmfPreview IsNot Nothing Then p.Image = _wmfPreview
p.SizeMode = PictureBoxSizeMode.Zoom
pPagePreview.Controls.Add(p)
pPagePreview.Location = New Point(0, 0)
pPagePreview.Width = _iPageWidth + Convert.ToInt32(Math.Round(DeviceDpi * 0.5))
pPagePreview.Height = _iPageHeight + Convert.ToInt32(Math.Round(DeviceDpi * 0.5))
p.Left = Convert.ToInt32(Math.Round(DeviceDpi * 0.25))
p.Top = Convert.ToInt32(Math.Round(DeviceDpi * 0.25))
p.BackColor = Color.White
ResumeLayout()
End Sub
然后当我showDialog()时,我得到了异常。
如果我查看调试器,MetaFile会抛出宽度和高度以及许多其他属性的异常。我知道我有一些可悲的不正确的编码,但我不知道是什么。我以前用 Delphi 很容易做到这一点。我错过了一些东西;请帮我找一下。
谢谢你的帮助
1条答案
按热度按时间wmvff8tz1#
好吧,答案找到了。不是在MS文档中,而是在不同的堆栈溢出答案中。
无论何时完成对要绘制到图元文件中的Graphics对象的处理,都需要刷新和/或处置Graphics对象以将这些更改提交到图元文件中。就像这样:
这样就行了