【问题标题】:Convert an Image转换图像
【发布时间】:2018-04-01 21:04:57
【问题描述】:

我试图将此代码转换为 vb.net 并添加一些代码来制作文件...但文件的分辨率变得很糟糕,我似乎无法将其插入到水晶报表中,我在转换时做错了什么它进入vb.net?在此先感谢:)

这里是原链接Convert an image into WMF with .NET?

<Flags>
Private Enum EmfToWmfBitsFlags
    EmfToWmfBitsFlagsDefault = &H0
    EmfToWmfBitsFlagsEmbedEmf = &H1
    EmfToWmfBitsFlagsIncludePlaceable = &H2
    EmfToWmfBitsFlagsNoXORClip = &H4
End Enum

Private Shared MM_ISOTROPIC As Integer = 7
Private Shared MM_ANISOTROPIC As Integer = 8
<DllImport("gdiplus.dll")>
Private Shared Function GdipEmfToWmfBits(_hEmf As IntPtr, _bufferSize As UInteger, _buffer As Byte(), _mappingMode As Integer, _flags As EmfToWmfBitsFlags) As UInteger
End Function
<DllImport("gdi32.dll")>
Private Shared Function SetMetaFileBitsEx(_bufferSize As UInteger, _buffer As Byte()) As IntPtr
End Function
<DllImport("gdi32.dll")>
Private Shared Function CopyMetaFile(hWmf As IntPtr, filename As String) As IntPtr
End Function
<DllImport("gdi32.dll")>
Private Shared Function DeleteMetaFile(hWmf As IntPtr) As Boolean
End Function
<DllImport("gdi32.dll")>
Private Shared Function DeleteEnhMetaFile(hEmf As IntPtr) As Boolean
End Function


Private Function MakeMetafileStream(image As Bitmap) As Byte()
    Dim metafile As Metafile = Nothing
    Using g As Graphics = Graphics.FromImage(image)
        Dim hDC As IntPtr = g.GetHdc()
        metafile = New Metafile(hDC, EmfType.EmfOnly)
        g.ReleaseHdc(hDC)
    End Using

    Using g As Graphics = Graphics.FromImage(metafile)
        g.DrawImage(image, 0, 0)
    End Using
    Dim _hEmf As IntPtr = metafile.GetHenhmetafile()
    Dim _bufferSize As UInteger = GdipEmfToWmfBits(_hEmf, 0, Nothing, MM_ANISOTROPIC, EmfToWmfBitsFlags.EmfToWmfBitsFlagsDefault)
    Dim _buffer As Byte() = New Byte(_bufferSize - 1) {}
    GdipEmfToWmfBits(_hEmf, _bufferSize, _buffer, MM_ANISOTROPIC, EmfToWmfBitsFlags.EmfToWmfBitsFlagsDefault)
    Dim hmf As IntPtr = SetMetaFileBitsEx(_bufferSize, _buffer)
    Dim tempfile As String = Path.GetTempFileName()
    CopyMetaFile(hmf, tempfile)
    DeleteMetaFile(hmf)
    DeleteEnhMetaFile(_hEmf)

    Dim stream = New MemoryStream()
    Dim data As Byte() = File.ReadAllBytes(tempfile)

    Return data
End Function

Private Sub Convert()
    Dim src As New Bitmap("C:\Users\Sample\Desktop\Logos\LogoTransparent\Transparentlogo.png")
    Dim Msteam As Byte() = MakeMetafileStream(src)
    Dim newF As String = "C:\Users\Alvin Rodriguez\Desktop\Logos\new logo transparent\Transparentlogo.wmf"
    System.IO.File.WriteAllBytes(newF, Msteam)
    Msteam = Nothing
End Sub

【问题讨论】:

  • 为什么你认为用 C# 标签来标记它是个好主意?
  • @DavidG 如果我是一个赌徒,我最好的猜测是,他是否用 C# 标记,因为他从中获取代码的链接是 C#。正如您已经提到的,它与此处无关,并且已对问题进行了编辑以删除有问题的标签。

标签: vb.net image crystal-reports wmf


【解决方案1】:

部分界面要修改:

Declare Function CopyEnhMetaFile Lib "gdi32" Alias "CopyEnhMetaFileA" (ByVal hemfSrc As IntPtr, ByVal lpszFile As String) As IntPtr

Declare Function DeleteEnhMetaFile Lib "gdi32" (ByVal hemf As IntPtr) As Integer

Private Declare Function GdipEmfToWmfBits Lib "gdiplus.dll" (ByVal hEmf As IntPtr,     ByVal bufferSize As UInteger, ByVal buffer() As Byte, ByVal mappingMode As Integer,     ByVal flags As EmfToWmfBitsFlags) As UInteger

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-29
    • 2021-12-10
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多