2012-04-12 6 views
0

Ich begann mit diesem C# QuestionWie in VB.net eine Bmp in einer RTF-Steuerelement zur Anzeige

Ich versuche, ein Bot-Programm ein BMP-Bild in einem rtf Feld angezeigt Ich mache. Diese Funktion soll eine Bitmap in RTF-Code konvertieren, der in einen anderen RTF-Formatierer eingefügt wird, der zusätzlichen Text enthält. So wie Smilies in einem Chat-Programm verwendet werden.

Aus irgendeinem Grund wird die Ausgabe dieser Funktion von der RTF-Box abgelehnt und verschwindet vollständig. Ich bin mir nicht sicher, ob es die Art, wie ich die bmp zu einer Binärkette bin Umwandlung oder wenn sein mit den Header-Tags gebunden in

lb.SelectedRtf = format (build.ToString, NewColor)

'returns the RTF string representation of our picture 
    Public Shared Function PictureToRTF(ByVal Bmp As Bitmap) As String 

    'Create a new bitmap 
    Dim BmpNew As New Bitmap(Bmp.Width, Bmp.Height, Imaging.PixelFormat.Format24bppRgb) 
    Dim gr = Graphics.FromImage(BmpNew) 
    gr.DrawimageUnscaled(Bmp, 0, 0) 
    gr.dispose() 

    Dim stream As New MemoryStream() 
    BmpNew.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp) 

     Dim bytes As Byte() = stream.ToArray() 

     Dim str As String = BitConverter.ToString(bytes, 0).Replace("-", String.Empty) 

     'header to string we want to insert 
     Using g As Graphics = Main.CreateGraphics() 
      xDpi = g.DpiX 
      yDpi = g.DpiY 
     End Using 

     Dim _rtf As New StringBuilder() 

     ' Calculate the current width of the image in (0.01)mm 
     Dim picw As Integer = CInt(Math.Round((Bmp.Width/xDpi) * HMM_PER_INCH)) 

     ' Calculate the current height of the image in (0.01)mm 
     Dim pich As Integer = CInt(Math.Round((Bmp.Height/yDpi) * HMM_PER_INCH)) 

     ' Calculate the target width of the image in twips 
     Dim picwgoal As Integer = CInt(Math.Round((Bmp.Width/xDpi) * TWIPS_PER_INCH)) 

     ' Calculate the target height of the image in twips 
     Dim pichgoal As Integer = CInt(Math.Round((Bmp.Height/yDpi) * TWIPS_PER_INCH)) 

     ' Append values to RTF string 
     _rtf.Append("{\pict\wbitmap0") 
     _rtf.Append("\picw") 
     _rtf.Append(Bmp.Width.ToString) 
     ' _rtf.Append(picw.ToString) 
     _rtf.Append("\pich") 
     _rtf.Append(Bmp.Height.ToString) 
     ' _rtf.Append(pich.ToString) 
     _rtf.Append("\wbmbitspixel24\wbmplanes1") 
     _rtf.Append("\wbmwidthbytes40") 
     _rtf.Append("\picwgoal") 
     _rtf.Append(picwgoal.ToString) 
     _rtf.Append("\pichgoal") 
     _rtf.Append(pichgoal.ToString) 
     _rtf.Append("\bin ") 

     _rtf.Append(str.ToLower & "}") 
     Return _rtf.ToString 
    End Function 

Public Function FormatText(ByVal data As String, ByVal newColor As fColorEnum) As String 
    data = System.Net.WebUtility.HtmlDecode(data) 
    data = data.Replace("|", " ") 
    Dim reg As New Regex("\$(.[0-9]+)\$") 
    If reg.IsMatch(data) Then 
     Dim meep As String = Regex.Match(data, "\$(.[0-9]+)\$").Groups(1).ToString 
     Dim idx As Integer = Convert.ToInt32(meep) 
     Dim img As String = Fox2RTF(idx) 

     If img IsNot Nothing Then data = Regex.Replace(data, "\$(.[0-9]+)\$", img) 
    End If 
    Dim myColor As System.Drawing.Color = fColor(newColor) 
    Dim ColorString = "{\colortbl ;" 
    ColorString += "\red" & myColor.R & "\green" & myColor.G & "\blue" & myColor.B & ";}" 
    Dim FontSize As Integer = cMain.ApFont.Size 
    Dim FontFace As String = cMain.ApFont.Name 
    FontSize *= 2 
    Dim test As String = "{\rtf1\ansi\ansicpg1252\deff0\deflang1033" & ColorString & "{\fonttbl{\f0\fcharset0 " & FontFace & ";}}\viewkind4\uc1\fs" & FontSize.ToString & data & "\par}" 
    Return "{\rtf1\ansi\ansicpg1252\deff0\deflang1033" & ColorString & "{\fonttbl{\f0\fcharset0 " & FontFace & ";}}\viewkind4\uc1\fs" & FontSize.ToString & data & "\cf0 \par}" 
End Function 
Private Function Fox2RTF(ByRef Img As Integer) As String 
    Dim shape As New FurcadiaShapes(Paths.GetDefaultPatchPath() & "system.fsh") 
    Dim anims As Bitmap() = Helper.ToBitmapArray(shape) 
    ' pic.Image = anims(Img) 

    Return PictureToRTF.PictureToRTF(anims(Img)) 

End Function 

Antwort