VB.netビットマップ(.TIFF)としてメタファイル/ EMFを保存
質問
現在、私はメタファイルを生成し、サードパーティ製のコントロールを持っています。私は、問題とディスクへの.WMFファイルを保存することができます。問題は、どのように私は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)
エンドサブ
_ UIntegerなどの公共の共有機能GetEnhMetaFileBits(ByValのhEMFとしてSystem.IntPtr、ByValのnsizeのようUInteger、ByValのlpDataとしてのIntPtr) エンド機能
<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例外がスローされた状態で終わります。
解決 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
他のヒント
あなたのコードは解読するのは難しいです。単純にビットマップにメタファイルを描画することは仕事を得る必要があります。たとえばます:
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