arbeiten mit .bmp-Dateien in python 3
Ich habe eine bmp-Datei. Es ist nur ein rotes Quadrat. Ich habe ein Programm schreiben, das mit Funktionen zu machen, haben weiße Streifen. Dinge, die ich hätte tun müssen:
- laden Sie die bmp-Datei.
- Lesen und bewerten Sie die bmp-Datei.
- code bestimmte Bereiche Koordinaten der Datei werden weiß gefärbt.
- schließen Sie die Datei
- display das Endprodukt-Datei als Ausgabe
ich bin ein Neuling und habe Probleme beim Lesen oder anzeigen der ursprünglichen bmp-Datei, geschweige denn, Bearbeiten Sie den Inhalt im inneren. es ist nicht vergleichbar mit dem öffnen einer txt-Datei und "readline()". auch wenn ich mit kopieren-einfügen, die die bmp-Datei in der pydev-Projekte src-Ordner in eclipse, ist es nicht zeigen, bis auf eclipse, also ich weiß nicht, ob, wie der computer erkennen würden, dass die Datei vorhanden ist. ich will Lesen vor dem posten hier, aber ich kann nicht scheinen, um viele Ergebnisse zu googeln, da bin ich nicht sicher, was genau ich suchen soll.
- Soll man dies tun, ohne Verwendung von Drittanbieter-Modulen wie etwa, sagen wir, PIL/Kissen?
- anscheinend nicht. mit nur grundlegende Codierung. dies ist ein Erster Jahr-cp-Kurs-Zuweisung. ich habe versucht, Bild importieren, aber das ist nicht erlaubt
- Look at dieser Python-Programm, um loszulegen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den einfachen Weg, dies zu tun ist mit einem Drittanbieter-image-processing-Bibliothek, wie PIL/Kissen. Der code ist einfach genug, dass Sie könnte es in ein paar Minuten aus den Beispielen auf der
Image
Modul docs...Aber, wenn Sie sind nicht erlaubt zu tun, dass, lassen Sie uns betrachten, wie Sie dies manuell tun.
Erste, BMP ist nicht eine text-Datei-format, es ist ein binäre - format. Das bedeutet, dass Sie haben, um es zu Lesen im Binärmodus. Und Sie kann es nicht Lesen "line by line", weil es nicht die Zeilen des Textes zu Lesen. Seit ein
bytes
Objekts ist nicht veränderbar, Sie werden wahrscheinlich möchten kopieren Sie es in einbytearray
mit zu arbeiten. Also:Als Nächstes müssen Sie, um eine Analyse der BMP-Datei-format. Ich vermute, der wichtigste Punkt der übung ist es, herauszufinden, wie zu tun, dass Sie sich, so gebe ich Ihnen einen link zu Wikipedia-Artikel, das beschreibt es besser als die Microsoft-Dokumente, und Sie können gehen von dort aus.
Den
struct
Modul in die standard-Bibliothek wird sehr hilfreich sein für die Interpretation der Header; es ist viel einfacher zum Lesen eines 32-bit-little-endian-Nummer mitstruct.unpack_from('<L', data, offset)
als mit durch das Lesendata[offset]
,data[offset+1]
usw. und re-Kombination von Ihnen in einem 32-bit-Zahl.Ich vermute, Sie können Sie ignorieren alle Optionen für BMP-Komprimierung—sonst wäre dies viel zu schwer eine Zuordnung. In der Tat, können Sie wahrscheinlich davon ausgehen, dass alle Kopfzeilen angeben, die häufigste Variante, und nur code, für, die. Vielleicht möchten Sie aber bitten Sie Ihre Lehrer auf, feedback zu geben, dass.
Nun, nachdem Sie gefunden haben, die "pixel-array" Teil des BMP, und Sie haben herausgefunden, wie diese zu interpretieren sind aus der DIB-header, können Sie einfach legen Sie die Pixel weiß auf welchen Positionen wollen Sie durch die Einstellung der Werte an den entsprechenden Indizes von bytearray. Zum Beispiel kann es sich als so einfach wie:
Schließlich, sobald Sie geändert haben Ihre roten Pixel auf weiß, können Sie es speichern mit: