Wie kann ich ein byte-array von einem TIFF-Bild und verwandeln Sie es in ein System.Zeichnung.Bild Objekt?

StackOverflow https://stackoverflow.com/questions/32750

  •  09-06-2019
  •  | 
  •  

Frage

Ich habe eine byte[] array-Inhalte stellen eine TIFF-Datei (wie in, wenn ich Schreibe diese bytes direkt in eine Datei mit den BinaryWriter Objekt, es bildet eine perfekt gültige TIFF-Datei), und ich versuche um Sie in ein System.Zeichnung.Bild Objekt so, dass ich kann verwenden Sie es für eine spätere manipulation (Fütterung in eine mehrseitige TIFF-Objekt)

Das problem das ich habe ist, dass der allgemein akzeptierte code für diese Aufgabe:

    public Image byteArrayToImage(byte[] byteArrayIn)
    {
        MemoryStream ms = new MemoryStream(byteArrayIn);
        Image returnImage = Image.FromStream(ms, true);
        return returnImage;
    }

nicht für mich funktioniert.Die zweite Zeile der obigen Methode, wo es ruft die Image.FromStream Methode stirbt, Laufzeit, nämlich

Parameter Not Valid

Ich glaube, dass die Methode wird Würgen auf die Tatsache, dass dies eine TIFF-Datei, aber ich kann nicht herausfinden, wie zu machen die FromStream Methode akzeptieren Sie diese Tatsache.

Wie schalte ich ein byte-array eines TIFF-Bildes in ein Bild-Objekt?

Auch, wie ich schon sagte, das Ziel von diesem ist es, ein byte-array mit einer mehrseitigen TIFF-Datei, die enthält die TIFF-Dateien, für die ich byte-array-Objekte jetzt.Wenn es ist ein viel besserer Weg zu gehen über das tun dies, ich bin alle für es.

War es hilfreich?

Lösung

Edit: Die Annahme, unten ist nicht richtig, ich hatte eine chance, um das Feuer bis mein IDE später und getestet mit und ohne Schreiben und sowohl besiedelt MemoryStream richtig.

Ich glaube, Sie brauchen, um schreiben Ihre MemeoryStream erste.

Als wenn mein Gedächtnis (kein Wortspiel beabsichtigt) dient mir richtig:

MemoryStream ms = new MemoryStream(byteArrayIn);

Erstellt einen Speicher-stream in der Größe.

Sie müssen dann schreiben Sie Ihre byte-array-Inhalt auf den Speicher-stream:

ms.Write(byteArrayIn, 0, byteArrayIn.Length);

Sehen, ob das behebt es.

Andere Tipps

OK, ich fand das Problem, und es wurde von einem Teil des Codes unabhängig von der Teil des Codes, ich wurde gefragt.Die Daten werden als Zeichenfolge übergeben, ich war Konvertierung in ein byte-array (war dies ein test rig, also habe ich versucht zu simulieren, das byte-array, das ich in die Haupt-app), dann die Umwandlung dieser zu einem MemoryStream, dann machen Sie ein Bild aus, das.

Was ich nicht merkte war, dass die Zeichenkette in Base64.Aufrufen Convert.FromBase64String() verursacht es zu verwandeln in ein byte-array zurück, das würde nicht töten Image.FromStream() Methode.

Also im Grunde ist es bis gekocht durch einen dummen Fehler meinerseits.Aber hey, der obige code ist noch hilfreich, und diese Seite wird wahrscheinlich dienen als ein Google-Ergebnis, wie um diesen Fehler zu vermeiden, um jemand anderes.

Auch fand ich eine einfache Möglichkeit zum erstellen eines Multi-Page-TIFF aus meiner byte-arrays hier.

Diese waren alle Hinweise, die mir geholfen herauszufinden, mein problem war das gleiche problem wie die Frage fragt.Deshalb möchte ich poste meine Lösung, die ich kam, weil diese hilfreiche Hinweise.Vielen Dank für alle Hinweise gepostet so weit!!!

Wie die Zeit Saunders posted in seiner Antwort, dass Write-Methode schreibt die bytes in den Speicher-stream ist wichtig.Das war mein Erster Fehler.

Dann meine Daten schlecht war, TIFF-Daten, aber in meinem Fall hatte ich ein zusätzliches Zeichen 13 am Anfang meiner Bilddaten.Einmal habe ich entfernt, dass es funktionierte gut für mich.

Wenn ich Lesen Sie über einige grundlegende TIFF-Datei-format-Spezifikationen, fand ich, dass TIFF-Dateien muss beginnen mit II oder MM (zwei bytes mit Werten von wahlweise 73 oder 77).II bedeutet, little-endian-byte-Reihenfolge ('Intel-byte-Reihenfolge') verwendet wird.MM big-Endung ('Motorola byte-Reihenfolge') verwendet wird.Die nächsten zwei bytes sind eine zwei-byte-integer-Wert ( = Int16 in .NETTO) 42, Binär 101010.

Also eine richtige TIFF-stream von bytes beginnt mit der dezimale byte-Werte:73, 73, 42, 0, oder, 77, 77, 0, 42.Ich empfehle jedem mit dem gleichen problem, dass wir erfahren, um überprüfen Sie Ihre TIFF-Daten byte-stream und stellen Sie sicher, dass Ihre Daten gültig TIFF-Daten!

Dank Schnapple und Tim Saunders!!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top