2010-03-24 3 views
1

В настоящее время у меня есть сторонний элемент управления, который генерирует метафайл. Я могу сохранить файл .wmf на диск без проблем. Проблема в том, как сделать метафайл в виде файла Tiff.VB.net Сохранение метафайла/EMF в виде растрового изображения (.tiff)

В настоящее время у меня есть следующий код, чтобы получить мой метафайл и сохранить его.

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 Как System.IntPtr, ByVal nРазмер: Как UInteger, ByVal lpData Как IntPtr) Как UInteger End Function

<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 

I «Я пробовал все виды IMAGE и графических вызовов и просто не могу сохранить метафайл как .tiff. Любые предложения были бы замечательными. Я даже попытался создать новое растровое изображение и нарисовать на нем метафайл. Я всегда получаю исключение GDI.

ответ

0

Мой окончательный код выглядит следующим образом:

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

Ваш код трудно расшифровать. Простое рисование метафайла в растровое изображение должно выполняться. Например:

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

Это работало, я просто запутался с ДПИ, чтобы получить мой .tiff быть высокого качества. – pehaada

+0

Метафайл является масштабируемым. Сделайте растровое изображение настолько большим, насколько вы этого хотите, используйте перегрузку DrawImage, которая принимает прямоугольник. –