首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.net将MetaFile / EMF保存为位图( .tiff)

VB.net将MetaFile / EMF保存为位图( .tiff)
EN

Stack Overflow用户
提问于 2010-03-25 06:07:13
回答 2查看 4.7K关注 0票数 1

目前我有一个第三方控件,可以生成一个元文件。我可以将.wmf文件保存到磁盘上,没有任何问题。问题是如何将图元文件呈现为Tiff文件。

目前,我有以下代码来获取我的图元文件并保存它。

代码语言:javascript
复制
 Dim mf As Metafile = page.GetImage(TXTextControl.Page.PageContent.All)



                        Dim enhMetafileHandle As IntPtr = mf.GetHenhmetafile()

                        Dim h As IntPtr
                        Dim bufferSize As UInteger = GetEnhMetaFileBits(enhMetafileHandle, 0, h)
                        Dim buffer(CInt(bufferSize)) As Byte

                        GetEnhMetaFileBits(enhMetafileHandle, bufferSize, buffer)

                        Dim msMetafileStream As New MemoryStream
                        msMetafileStream.Write(buffer, 0, CInt(bufferSize))


                        Dim baMetafileData() As Byte
                        baMetafileData = msMetafileStream.ToArray
                        Dim g As Graphics = Graphics.FromImage(mf)


                        mf.Dispose()



                        File.WriteAllBytes("c:\a.wmf", baMetafileData)

结束sub

_公共共享函数GetEnhMetaFileBits( ByVal hEMF As System.IntPtr,ByVal nSize As UInteger,ByVal lpData As IntPtr) As UInteger End Function

代码语言:javascript
复制
<System.Runtime.InteropServices.DllImportAttribute("gdi32.dll", EntryPoint:="GetEnhMetaFileBits")> _

Public Shared Function GetEnhMetaFileBits(<System.Runtime.InteropServices.InAttribute()> ByVal hEMF As System.IntPtr, ByVal nSize As UInteger, ByVal lpData() As Byte) As UInteger
End Function

我尝试了所有类型的图像和图形调用,但就是不能将元文件保存为.tiff。任何建议都是很棒的。我甚至尝试创建一个新的位图,并在上面绘制图元文件。我总是以抛出GDI异常而告终。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-10 01:08:20

我的最终代码如下所示:

代码语言:javascript
复制
 Dim NewGraphic As Graphics = Nothing
        Dim BitonalImage As Bitmap = Nothing

        Using bmp As New Bitmap(3264, 4224)
            Try

                NewGraphic = Graphics.FromImage(bmp)
                NewGraphic.FillRectangle(New SolidBrush(Color.White), 0, 0, 3264, 4224)
                NewGraphic.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
                NewGraphic.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
                NewGraphic.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
                NewGraphic.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
                NewGraphic.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAliasGridFit

                NewGraphic.DrawImage(MetaFileToConvert, 0, 0, 3264, 4224)

                BitonalImage = CType(ConvertToBitonal(CType(bmp, Bitmap)), Bitmap)
                BitonalImage.SetResolution(385, 385)

                OutBMP = BitonalImage

            Catch ex As Exception
                Throw ex
            Finally
                NewGraphic.Dispose()
                BitonalImage.Dispose()
            End Try

        End Using
票数 0
EN

Stack Overflow用户

发布于 2010-03-25 09:27:12

你的代码很难破译。只需将图元文件绘制为位图即可完成工作。例如:

代码语言:javascript
复制
Dim mf As Metafile = page.GetImage(TXTextControl.Page.PageContent.All)
Using bmp As New Bitmap(mf.Width, mf.Height)
  Using gr As Graphics = Graphics.FromImage(bmp)
    gr.DrawImage(mf, 0, 0)
  End Using
  bmp.Save("c:\temp\test.tiff", ImageFormat.Tiff)
End Using
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2511762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档