StretchBltによる縮小表示とRGB値

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

StretchBltによる縮小表示とRGB値

#1

投稿記事 by rozeo » 11年前

こんにちはrozeoです。

前のPPMのDIBSectionを大きさによってStretchBltで半分の大きさで描画しているんですが、半分に表示したときにところどころ色が変化してしまいます。

期待する表示
画像
実際の表示
画像

これらのサイズは1000*1000を超えてるため縮小表示しないと画面におさまりません。
そこで半分にして表示すると色が変になる…原因はStretchBltでしょうけど…
この変な色になってしまうのはどうにかなりませんか?

あともうひとつ

PPM画像のデータ部は R G B R G B R G B R G B...
のようにRGBの値が循環しているのですが、それを順番に1バイトずつ(バイナリ形式)で読み取り、RGBマクロにRGBの順に引数を渡して、DIBSectionのピクセル列に格納したら、色が反転してしまいました。

コード:

char r,g,b;
fread( &r,1,1,fp );
fread( &g,1,1,fp );
fread( &b,1,1,fp );
bPixelBits[i] = RGB( (int)r,(int)g,(int)b );//for文でピクセルの数だけまわしてる
//bPixelBits:ピクセル列
RGBマクロへ渡す引数を左右逆にすると反転せずに表示されます。

コード:

bPixelBits[i] = RGB( (int)b,(int)g,(int)r );
これはどうしておこるのでしょうか?
なお、DIBSectionを生成するにあたってBITMAPINFO構造体のbmiHeader.biHeightには負数を格納して生成しています。(正の数にしても変化なし)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: StretchBltによる縮小表示とRGB値

#2

投稿記事 by みけCAT » 11年前

rozeo さんが書きました:半分にして表示すると色が変になる…原因はStretchBltでしょうけど…
この変な色になってしまうのはどうにかなりませんか?
たまたまサンプリング時に変な色の所ばっかり当たっているかもしれません。
StretchBltを実行する前に、

コード:

SetStretchBltMode(StretchBltのコピー先のデバイスコンテキスト, STRETCH_HALFTONE);
を実行してみてください。
(すでに行っていたら申し訳ありません)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

rozeo
記事: 86
登録日時: 12年前
住所: 広島 呉 (学生寮
連絡を取る:

Re: StretchBltによる縮小表示とRGB値

#3

投稿記事 by rozeo » 11年前

みけCAT さんが書きました:
rozeo さんが書きました:半分にして表示すると色が変になる…原因はStretchBltでしょうけど…
この変な色になってしまうのはどうにかなりませんか?
たまたまサンプリング時に変な色の所ばっかり当たっているかもしれません。
StretchBltを実行する前に、

コード:

SetStretchBltMode(StretchBltのコピー先のデバイスコンテキスト, STRETCH_HALFTONE);
を実行してみてください。
(すでに行っていたら申し訳ありません)
その関数をはさむと色の件は解決しました。

あと2つ目のこともわかれば宜しくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る