- 題名: Bitmapオブジェクトのファイル出力(G4圧縮TIFF形式)について
- 日時: 2003/11/20 17:22:49
- ID: 1509
- この記事の返信元:
- (なし)
- この記事への返信:
- [1551] Re[1]: Bitmapオブジェクトのファイル出力(G4圧縮TIFF形式)について2003/11/24 1:31:34
- ツリーを表示
管理人様、深夜にも関わらずレスありがとうございます。 私ではきっとこのサイトには辿り着けなかったと思います。大変助かります。 まだ、翻訳しきれていないのですがコードサンプルが載っていそうなので検証してみます。 少し時間がかかってしまうかもしれませんが、解決しましたらまたこちらにご報告致します。 ありがとうございました。
2003/11/30(Sun) 01:40:34 編集(投稿者)・Matthew Reynolds' .NET 247 : Newsgroup - could you make it very understandable? http://www.dotnet247.com/247reference/msgs/22/112817.aspx ・319591 - HOW TO: Save a .gif File with a New Color Table By Using Visual Basic .NET http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319591 上記2つのサンプルが大変参考になりました。 しかし、知識不足で半分ほどしか理解できていません。 自分なりにポイントをまとめましたが、 ・8bit以下のbitmapオブジェクトにはSetPixelメソッドが使用できないのでメモリに直接書き込む必要がある? ・メモリに直接書き込むにはC#のUnsafeコードが必要? ・今回のケースでVB.NET上でC#のUnsafeと同様のことを実現するには、 http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319591 のサンプルにあるWin32APIのCopyArrayToを使う必要がある? という認識をしています。 また、8bitbitmapと1bitbitmapのStrideの値が違うので、 上記2つのサンプル間の処理の違いもそのあたりがポイントになっていると思うのですが、C#のコードがあまり読めないためよく理解できていません。 今回は、 http://www.dotnet247.com/247reference/msgs/22/112817.aspx のサンプルをもとにC#でクラスを作成し、 VB.NETのコードからそのクラスを使用することでなんとか実装できました。 今後勉強し、処理内容を理解していきたいと思います。 いろいろご教授頂き、大変参考になりました。 この度は本当にありがとうございました。
VB.NETでのサンプルありがとうございました。 実行してみましたが、正常に動作致しました。 http://www.dotnet247.com/247reference/msgs/22/112817.aspx のC#のコードで生成されるデータと、 管理人様作成のVB.NETのコードで生成されるデータの バイナリ比較を行いましたが、一致致しました。 VB.NETでのコード提供していただいたおかげで ようやく処理内容が理解できました。 処理の流れをまとめてみると ・ソースbitmapオブジェクトと同じ大きさ、解像度の1ビットbitmapオブジェクトを作成 ・1ビットbitmapをメモリにロックする ・1ビットbitmapのピクセルデータ先頭のメモリアドレスを取得 ・1ビットbitmapのStride(1行分のピクセルデータに使用するbyte数)を取得 ・1ビットbitmapに書き込むピクセルデータの作業領域を作成 (その容量は1ビットbitmapのheight*Strideとなる) ・ソースbitmapのピクセルデータを1ピクセルずつ取得し、 そのピクセルのRGBの値から輝度luminanceを求め、 閾値luminanceCutOffをもとにそのピクセルの2値化判定を行う ・ビット単位で判定結果を作業領域に保存 ・ソースbitmap全ピクセル分処理したら、 作業領域のデータを1ビットbitmapのメモリ領域に上書き ・1ビットbitmapのロックを解除 ・1ビットbitmapを戻り値として返す といった感じでしょうか? ポイントは1ビットbitmapでは8ピクセル分のデータが1byteに格納されるので ビット単位の編集を行う必要があるということですよね? And、Or、Notなどを使用することでそれが実現できるということは大変勉強になりました。 今回は、管理人様には色々とお世話になりました。 本当にありがとうございました。
分類:[.NET]