私はbmpファイルを持っています。それはちょうど赤い広場です。私はそれが白い縞模様を持つように機能を持つプログラムを書く必要があります。私がする必要があること:pythonで.bmpファイルを扱う3
- bmpファイルを読み込みます。
- bmpファイルを読み込んで評価します。
- コード色を付けるファイルの特定の領域の座標は白です。
- 内のコンテンツ、私は初心者だし、トラブルの元BMPファイルの読み込みや表示を持っています
出力としておろか編集したファイル
私はbmpファイルを持っています。それはちょうど赤い広場です。私はそれが白い縞模様を持つように機能を持つプログラムを書く必要があります。私がする必要があること:pythonで.bmpファイルを扱う3
出力としておろか編集したファイル
これを行う簡単な方法は、PIL/Pillowのようなサードパーティの画像処理ライブラリです。コードは、Image
モジュールのドキュメントの例から数分で把握できるほど簡単です...
しかし、これを行うことができない場合は、手動でこれを行う方法を見てみましょう。
まず、BMPはテキストファイル形式ではなく、バイナリの形式です。つまり、バイナリモードで読む必要があります。そして、それは読むべきテキストの行を持っていないので、あなたはそれを "行単位"で読むことはできません。 bytes
オブジェクトは可変ではないので、おそらくそれをbytearray
にコピーして作業したいと思うでしょう。したがって:
with open('spam.bmp', 'rb') as f:
data = bytearray(f.read())
次に、BMPファイル形式を解析する必要があります。私は練習の主なポイントはあなた自身がそれを行う方法を考えていると仮定しますので、私はWikipedia's articleへのリンクを提供します。これはMicrosoftのドキュメントよりも優れており、そこから行くことができます。
標準ライブラリのstruct
モジュールは、ヘッダーの解釈に非常に役立ちます。 struct.unpack_from('<L', data, offset)
で32ビットのリトルエンディアンの数値を読み取るのは、data[offset]
,data[offset+1]
などを読み取って32ビットの数値に再結合するよりもはるかに簡単です。
私はBMP圧縮のすべてのオプションを無視できると思います。そうしないと、割り当てが難しくなります。実際には、ヘッダーのすべてが最も一般的なバリアントを指定し、そのためのコードしかないと仮定することができます。しかし、先生にフィードバックを求めることができます。
今度は、BMPの「ピクセル配列」部分を見つけたら、DIBヘッダーからそれを解釈する方法を理解したので、設定することによって、ピクセルを白に設定できますbytearrayの適切なインデックスの値。あなたが白にあなたの赤のピクセルを変更したら、あなたがそれを保存することができ、
最後pos = pixel_array_offset + row_size * y + pixel_size * x
data[pos:pos+3] = 255, 255, 255
:例えば、それはのように簡単になるかもしれない
with open('eggs.bmp', 'wb') as f:
f.write(data)
ありがとうございました。これは私を助けてくれました。私はbmpファイルを扱う方法がわかりませんでした。私はバイナリファイルの種類についてもっと調べます。 – amin
あなたが行うことになっていますこれは、例えば、PIL/Pillowのような第三者モジュールを使用しないでですか? – abarnert
は明らかにそうではありません。基本的なコーディングのみを使用します。これは初年度のcpコースの援助です。私はインポートイメージを使用しようとしましたが、許可されていません。 – amin
[this](http://www.python.org.br/wiki/ImagemTGA)Pythonプログラムを開始してみてください –