VB.NET حفظ metafile / emf كصورة النقطة (.tiff)
سؤال
حاليا لدي تحكم طرف ثالث يولد metafile. يمكنني حفظ ملف .wmf إلى القرص بدون مشكلة. المشكلة هي كيف أقوم بتقديم Metafile كملف TIFF.
حاليا لدي الرمز التالي للحصول على metafile وحفظه.
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)
نهاية الفرعية
_ وظيفة مشتركة عامة getenhmetafileBits (byval hemf as system.intptr ، byval nsize as uinteger ، byval lpdata as intptr) كدالة نهاية uinteger
<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. أي اقتراح يمكن أن يكون عظيما. حتى أنني حاولت إنشاء صورة نقطية جديدة ورسم metafile عليها. أنا دائما ينتهي مع استثناء GDI يتم إلقاؤه.
المحلول 2
الرمز النهائي الخاص بي يشبه:
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
نصائح أخرى
من الصعب فك الرمز الخاص بك. ببساطة رسم metafile إلى صورة نقطية يجب أن ينجز المهمة. علي سبيل المثال:
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
لا تنتمي إلى StackOverflow