Programmgesteuertes Hinzufügen von Bildern zum RTF-Dokument
Ich versuche ein Bild hinzufügen, um ein RTF-Dokument, das ich erschaffe. Ich würde es lieber nicht verwenden "copy/paste" - Methoden (das einbeziehen einfügen das Bild in einem RichTextBox-Steuerelement, und dann Zugriff auf die .RTF-Eigenschaft), die purge-die Zwischenablage (und damit Störung und Verwirrung für meine Endbenutzer).
Den code habe ich bislang gibt den string zurück, muss eingefügt werden in das RTF-Dokument, das Bild zu drucken. Das Bild eingegeben werden ($Pfad) ist in der Regel im bmp-oder jpeg-format, aber in diesem Stadium bin ich nicht betroffen mit, wie das Bild gespeichert ist innerhalb der RTF nur, dass ich es bekommen kann, zu arbeiten.
public string GetImage(string path, int width, int height)
{
MemoryStream stream = new MemoryStream();
string newPath = Path.Combine(Environment.CurrentDirectory, path);
Image img = Image.FromFile(newPath);
img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte [] bytes = stream.ToArray();
string str = BitConverter.ToString(bytes, 0).Replace("-", string.Empty);
//string str = System.Text.Encoding.UTF8.GetString(bytes);
string mpic = @"{\pict\pngblip\picw" +
img.Width.ToString() + @"\pich" + img.Height.ToString() +
@"\picwgoa" + width.ToString() + @"\pichgoa" + height.ToString() +
@"\hex " + str + "}";
return mpic
}
Aber das problem ist, dass dieser code funktioniert nicht, weil so weit wie ich sagen kann, das string str, nicht die richtigen string-Konvertierung in das RTF.
Edit: Mein problem war, fehlt ein Leerzeichen nach dem \hex in @"\hex "und auch nicht entfernen der" - " - Zeichen aus den zurückgegebenen Wert der BitConverter
InformationsquelleAutor der Frage | 2009-09-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
versuchen Sie diese links
müssen Sie ändern "picwgoa" zu "picwgoal" und "pichgoa" zu "pichgoal"
Hier haben Sie eine Liste der unterstützten Bildformate
InformationsquelleAutor der Antwort RRUZ
Verbrachte einen Tag oder so googeln Antworten. Zusammengebastelt Leckerbissen aus der ganzen stackoverflow und anderen Quellen. Feed dieses eine Bild, werde es zurück die Zeichenfolge, die Sie brauchen, um hinzuzufügen, um Ihre richtextbox-Steuerelement.rtf-Erweiterung. Die Breite des Bildes ändert sich und muss berechnet werden, die Formel ist gegeben.
InformationsquelleAutor der Antwort JiffyWhip
Später Besucher dieser Seite (wie war ich vor ein paar Tagen) ist, könnte der folgende link hilfreich: Konvertieren Sie ein Bild in WMF mit .NET
Wird man feststellen, dass WordPad ignoriert Bild nicht gespeichert in der richtigen Windows-MetaFile-format. Also, im vorherigen Beispiel auf dieser Seite nicht zeigen, bis überhaupt nicht (obwohl es funktioniert gut in OpenOffice und Word selbst). Das format, das WordPad unterstützt:
{/pict/wmetafile8/picw[Breite]/pich[Höhe]/picwgoal[scaledwidth]/pichgoal[scaledheight] [Bild-als-string-byte-hex-Werte]} (mit Bedingungen in eckigen Klammern ersetzt mit den entsprechenden Daten).
Immer die "geeignete Daten" getan werden kann durch die Verfahren in den obigen link. Für diejenigen, die mit python auf der Suche nach einer Lösung, hier ist der Anfang von einem (ich glaube einige dpi/Skalierung Probleme bleiben). Dies erfordert PIL(oder Kissen), ctypesund clr (Python .NET). Verwendung von PIL/Kissen und öffnen Sie zuerst das Bild. Hier habe ich es offen, wie "canv":
InformationsquelleAutor der Antwort Darren Ringer
Fand ich, dass die meisten RTF-Felder mit dem folgenden format:
Wenn
[hex/bin]
ist die große Menge von hex-Zeichenfolgen, die das Bild-format. Auf diese Weise arbeiten beide für Word, rtf, und sowohl für die RTF-box - so ist es effizienter.In meiner computer Bild in einer Größe von 180x320 Pixel umgewandelt worden, 2699x4799 twips, was bedeutet, dass 1pix=15 twips, soweit ich sehen kann, wie dies in 3 Rechnern, die ich habe testen, zwischen Ihnen WinXP prof, WinXP home und Win 7.
InformationsquelleAutor der Antwort Xerix