Lesen-abbild von Access - parameter nicht gültig ist
Habe ich einfache Datenbank in Access .mdb-Datei, aber ich weiß nicht, wie man mit: "parameter ungültig" - Ausnahme, wenn Im erstellen Image
aus stream.
Ich ' V zu Lesen, dass ich zu Streifen 78 bytes offset ( von hier aus ), aber ich noch bekommen "parameter ungültig" - Fehler
wenn ich Anrufe, FromStream, auch nach dem abstreifen der ersten 78 bytes.
Funktioniert das nicht bei mir:
byte[] abytPic = (byte[])dt.Rows[0]["Photo"]; byte arrary with image
if ((abytPic[0] == 21) && (abytPic[1] == 28)) //It's true
{
byte[] abytStripped = new byte[abytPic.Length - 78];
System.Buffer.BlockCopy(abytPic, 78, abytStripped, 0, abytPic.Length - 78);
msPic = new emoryStream(abytStripped);
}
- Wenn Sie die MS Access-Tabelle, die enthält Ihre Image-Spalte, was Sie text sehen Sie in diesem Bereich? Ist es "Long binary-Daten" oder etwas anderes?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie beim Lesen die Daten direkt aus MS Access, brauchen Sie nicht zu Streifen alle header-Informationen.
Vorausgesetzt, das Bild wird gespeichert als BLOB, die die häufigste ist, hier ist der code zum Einlesen in den Byte-array aus der Datenbank und speichern als Bild-Datei (sorry, VB statt C#):
Diesem Beispiel, das ich hatte, herumliegen, ist eine, wo ich wusste, dass die Dateien in der Datenbank waren .emf-Bilder. Wenn Sie wissen, die Erweiterung, können Sie es auf den Namen der Datei. Wenn Sie nicht, können Sie es leer lassen und dann öffnen Sie die resultierende mit einem Bild-viewer, starten sollte. Wenn Sie brauchen, um zu finden, die Erweiterung oder die Datei-Typ, wenn es einmal als Datei gespeichert, können Sie es mit einem hex-editor und Datei-Typ wird aus den header-Informationen.
Deine Frage ist ein bisschen unklar, also ich bin nicht sicher, ob der obige code ist genau das, was Sie wollen, aber sollte man viel näher.
EDIT:
Dies ist der VB-code, der die Byte-array, lädt es in ein MemoryStream-Objekt erstellt, und dann ein Image-Objekt aus dem Stream. Dieses Stück code hat Prima funktioniert und angezeigt wird das Bild in eine picturebox auf meiner form.
Wenn das C# - Pendant ist nicht für Sie arbeiten, dann ist das problem wahrscheinlich, wie das Bild gespeichert wird, in der MS Access-Datenbank.
EDIT:
Wenn das Bild in Ihre Datenbank gespeichert ist, als ein 'Paket' und nicht ein 'Long binary-Daten", dann müssen Sie die Streifen die header-Informationen, die von MS Access erweitert. Ich Spiele schon mit dem "Paket" Art der Bild-Speicher mit einer einfachen .jpg-Datei. Der header ist in diesem Fall viel länger als 78 bytes. In diesem Fall ist es tatsächlich 234 bytes und MS Access auch Hinzugefügt einige Informationen zum Ablauf der ursprünglichen Datei; über 292 bytes in diesem Fall.
Es sieht aus wie Ihre ursprüngliche Ansatz war richtig, Sie brauchen nur zu bestimmen, wie viele bytes an, die Streifen von der Vorder-und Rückseite des Byte-array für Ihre situation.
Ich es bestimmt für meine Datei, indem Sie vergleichen die ursprüngliche image-Datei und die Datei aus der Datenbank exportiert, (nicht auf ein Stream-Objekt, siehe mein Erster code) in einem hex-editor. Sobald ich herausgefunden habe, wie viel Informationen (header und footer) wurde Hinzugefügt, die von MS Access, die ich dann wusste, wie viele bytes benötigt, um entfernt werden.
EDIT:
Die Größe des headers Hinzugefügt, die von MS Access, wenn das Bild gespeichert ist, als 'Paket' variiert je nach Datei-Typ und den ursprünglichen Speicherort (vollständiger Pfad) des Bildes, wenn es abgelagert wurde, in die MS Access-Datenbank. So, auch für die gleiche Datei-Typ kann eine unterschiedliche Anzahl von bytes an, die Streifen aus dem header für jede Datei.
Dies macht es viel schwieriger, denn dann müssen Sie zum Scannen der byte-array, bis Sie das normale start-der-Datei-information für den Dateityp, und klicken Sie dann strip alles, bevor es.
Alle dieser Kopfschmerz ist einer der Gründe, warum es besser ist, speichern die Bilder als BLOBs "Long binary-Daten" in einer Datenbank. Der Abruf ist viel einfacher. Ich weiß nicht, wenn Sie die Möglichkeit haben, dies zu tun, aber wenn es so ist, es wäre eine gute Idee.
Ich glaube nicht, dass dein problem mit der Datenbank. "Parameter nicht gültig" - Ausnahmen beim Umgang mit Bildgebung kann eine totale Schmerzen wie ich haben sich vorher mit Ihnen. Sie sind nicht sehr klar, was das problem ist.
Wie genau wurde das Bild in die Datenbank? Es könnte ein problem mit dem schreiben des Bildes in die Datenbank, bevor Sie haben sogar versucht, ihn zu ziehen. Auch, welche Art Datei ist das Bild?
BEARBEITEN Hier finden Sie einige Beispiel-code, den ich verwendet habe, bevor man ein Bild aus einem byte-array.