So erstellen Sie eine jpg-Bild dynamisch im Speicher mit .NET?
Habe ich eine .NET (3.5 SP1) library (DLL), geschrieben in C#. Ich muss erweitern diese Bibliothek durch eine Klasse Methode die folgende Signatur haben:
public byte[] CreateGridImage(int maxXCells, int maxYCells,
int cellXPosition, int cellYPosition)
{
...
}
Diese Methode soll Folgendes tun:
- Input-Parameter
maxXCells
undmaxYCells
definieren Sie die Größe der Zellen-raster in X-und Y-Richtung.maxXCells
undmaxYCells
ist die Anzahl der Zellen in jeder Richtung. Die einzelnen Zellen sind viereckig. (Es ist also eine asymmetrische Schachbrett.) - Input-Parameter
cellXPosition
undcellYPosition
identifizieren, die eine spezielle Zelle innerhalb dieses raster und diese Zelle muss gefüllt werden mit einem Kreuz. - Keine ausgefallenen Grafiken notwendig sind, wirklich nur schwarz grid-Linien auf einem weißen hintergrund und ein X in einer der Zellen.
- Die resultierende Grafik muss im jpg-format.
- Erstellung dieser Grafik muss im Speicher stattfinden-und sollte nichts in einer Datei gespeichert und auf der Festplatte noch auf dem Bildschirm gezeichnet.
- Die Methode gibt das generierte Bild als
byte[]
Ich bin nicht sehr vertraut mit Grafik-Funktionen .NET so meine Fragen sind:
- Ist dies überhaupt möglich mit .NET 3.5 SP1-ohne zusätzliche third-party-Bibliotheken (was ich gerne vermeiden möchte)?
- Was sind die grundlegenden Schritte, die ich Folgen müssen, und was sind die wichtigen .NET-namespaces, Klassen und Methoden, die ich wissen müssen, um dieses Ziel zu erreichen (gerade Linien zeichnen und andere einfache grafische Elemente "im Speicher" und konvertieren Sie das Ergebnis in ein byte-array im jpg-format)?
Danke für Vorschläge im Voraus!
InformationsquelleAutor der Frage Slauma | 2011-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende ist ein vollständiges Codebeispiel, mit GDI zeichnen Sie ein raster, und legen Sie ein Kreuz (mit rotem hintergrund) genau wie im Beispiel Bild unten. Es verwendet die GDI-genau wie die anderen Antworten, aber die eigentliche Arbeit erfolgt durch Durchlaufen der Zellen und Rasterlinien zeichnen.
Den folgenden code
erstellen ein 10x10 raster mit einem Kreuz in der Größe von 9 x 9 position:
Eine neue Ergänzung zu
CreateGridImage()
ist die Zugabe einer boxSize-argument legt die Größe jedes "Quadrat" in das rasterInformationsquelleAutor der Antwort NakedBrunch
Erstellen Sie ein System.Zeichnung.Bitmap-Objekt.
Erstellen Sie ein Graphics-Objekt zeichnen.
Speichern Sie das Bitmap in einen MemoryStream als ein JPEG-Objekt.
Vergessen Sie nicht, rufen Sie Dispose auf Ihre temporäre bitmap!
Beispiel-code ist unten, Sie können ändern Sie die pixel-Formate und verschiedene Optionen, unten, schauen Sie auf der MSDN-Dokumentation.
InformationsquelleAutor der Antwort Peter Tate
Zunächst über das zeichnen, können Sie entweder:
Als für das speichern, die Sie nutzen könnten
MemoryStream
Klasse nicht halten Ihre bytes und dann get array von bytes aus.Beispielcode könnte so Aussehen (vorausgesetzt, Sie verwenden möchten
Graphics
- Objekt zum zeichnen auf bitmap:InformationsquelleAutor der Antwort Marcin Deptuła
Slauma,
Hier ist noch ein weiterer Weg, die verwendet WindowsForm ist DataGridView - Steuerelement zu zeichnen-raster.
===
In der client-app.config (ersetzen Sie diese Zeile):
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
===
Happy Coding !
InformationsquelleAutor der Antwort Karthik Mahalingam