掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
単色のビットマップファイルを16色に変更するためには (ID:69455)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
実際にプログラム作らず勘で答えているのでとんでもない間違えしているかもしれない。 orの意味がわかった。 shiftの意味もわかった。 酷過ぎ。 これ1bppのときのプログラムのまま変えていないんだな。 アルゴリズムが1bppのままだとは理解するまでに余計な手間とらされたよ。 >4bitに対応できていない状態です 理解せず適当に4倍してみたらそれっぽくなっただけで全くもって酷過ぎ。 これは対応していないようなもの。 変更箇所が多すぎて回答面倒だな。 まあ誰かが作った酷いプログラムを引き継いでいるだけなんだろうけど。 俺がputPixelで左辺の書き方示したのに事実上無視している状態だし。 右辺はBitMapFont8x8が1bppのデータだから4bppのデータに変えないといけない。 # 左辺のx軸はx+0〜x+7で、右辺のx軸は0〜7の変化。 左辺のx軸が偶数なら上位4ビットをかき変え...略 これから書き変える部分を0にしてそうではない部分を元のままの値にしておく unsigned char mask4[2] = {0x0f,0xf0}; *(FigureBuff + x + ix + HorizonBytes * (y - 7 + iy)) &= mask4[(x + ix) % 2]; たぶんこんな感じ。 動作確認してないから正しいか判らない。 patternは1bppだから4bppに変換する。 色は背景色0,前景色15とすると、 unsigned char mask1[8] = {128,64,32,16,8,4,2,1} unsigned char color; if( (pattern[iy] & mask1[ix%8]) == 0 ) color = 0; else color = 15; 左辺のx軸が偶数なら上位4ビットをかき変え...なので 右辺のx軸が偶数なら上位4ビットへ移動させる。 if( (ix % 2) == 0 ) color <<= 4; これから書き変える部分を0にしておいたので ビット論理和すればそこだけ書き変えたことになる。 *(FigureBuff + x + ix + HorizonBytes * (y - 7 + iy)) |= color; たぶんこんな感じ。 動作確認してないから正しいか判らない。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.