2013-11-29 9 views
6

私はbmpファイルを持っています。それはちょうど赤い広場です。私はそれが白い縞模様を持つように機能を持つプログラムを書く必要があります。私がする必要があること:pythonで.bmpファイルを扱う3

  • bmpファイルを読み込みます。
  • bmpファイルを読み込んで評価します。
  • コード色を付けるファイルの特定の領域の座標は白です。
  • 内のコンテンツ、私は初心者だし、トラブルの元BMPファイルの読み込みや表示を持っています

出力としておろか編集したファイル

  • 表示最終製品のファイルを閉じます。 txtファイルと "readline()"を開くのと似ていません。また、私はコピーをコピーするときにpyclipseプロジェクトのsrcフォルダにeclipseのbmpファイルを貼り付けると、Eclipseに表示されないので、コンピュータがそのファイルがどのように認識されるかわからない。私はここに投稿する前にそれを読んでみたいが、私は何を検索すべきか正確にはわからないので、私はグーグルで多くの結果を得ているようではない。

  • +1

    あなたが行うことになっていますこれは、例えば、PIL/Pillowのような第三者モジュールを使用しないでですか? – abarnert

    +0

    は明らかにそうではありません。基本的なコーディングのみを使用します。これは初年度のcpコースの援助です。私はインポートイメージを使用しようとしましたが、許可されていません。 – amin

    +1

    [this](http://www.python.org.br/wiki/ImagemTGA)Pythonプログラムを開始してみてください –

    答えて

    16

    これを行う簡単な方法は、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) 
    
    +0

    ありがとうございました。これは私を助けてくれました。私はbmpファイルを扱う方法がわかりませんでした。私はバイナリファイルの種類についてもっと調べます。 – amin

    関連する問題