自作ビットマップファイルを作成 – プログラミング – Home

自作ビットマップファイルを作成
 
通知
すべてクリア

自作ビットマップファイルを作成


レブロン
 レブロン
(@レブロン)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

環境はVC6 Win32コンソールアプリ MFC対応です。

下記変数の値0,1でビットマップ白、黒表示をしたい。

unsigned long gDrawBuff[MAX_DRAW_BUFF_Y_SZ][MAX_DRAW_BUFF_X_SZ];

MAX_DRAW_BUFF_Y_SZ:2 Y座標
MAX_DRAW_BUFF_X_SZ:2 X座標

左上が0,0としたときにgDrawBuff[0][0]=0x8000000のときに
(0,0)だけ黒となるようにしたい
(Y=2, X=64のビットマップ)

下記、ソースで試すと毎回ビットマップデータが違います。
(作成したビットマップをペイント800%表示して確認)
設定に間違いがあるのでしょうか?
ご教授下さい。


引用解決済
トピックタグ
レブロン
 レブロン
(@レブロン)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

すみませんがソースを貼り付けると
”スパムキーワードが含まれています。”となるので
分割して載せます。


返信引用
レブロン
 レブロン
(@レブロン)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

ソースが貼り付けられません。

省略すると、

BITMAPINFOHEADER構造体と
BITMAPFILEHEADER構造体と
RGBQUAD構造体を指定してあげて。

その順にCFILEでライトしています。


返信引用
Alq3
 Alq3
(@Alq3)
ゲスト
結合: 15年前
投稿: 28
 

説明部分がよくわかりません。
コードもないし、gDrawBuffと生成されるべきビットマップの対応関係がわかりません。

>ソースで試すと毎回ビットマップデータが違います。
とありますが、同じ出力が得られる条件で実行していますか?
ビットマップのサイズを変えたりしていませんか。
毎回どのように異なるのかを記述すれば何らかのヒントが挙がるかもしれません。

>BITMAPINFOHEADER構造体と
>BITMAPFILEHEADER構造体と
>RGBQUAD構造体を指定してあげて。
>その順にCFILEでライトしています。
パレットまでしかない?データ部はきちんと出力していますか?

とりあえず作成したビットマップファイルをバイナリで見て何が違うのかを確かめてみ
てはいかがでしょう。
※4バイトアラインメントを忘れてるとかありがちですけど。。

拡散的ですが気になることを挙げてみました。


返信引用
レブロン
 レブロン
(@レブロン)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

わかりづらくて申し訳ありません。
質問を変えます。

X(64),Y(2)の白黒のビットマップを作成するための
BITMAPINFOHEADER構造体とBITMAPFILEHEADER構造体
に対しての設定方法がわかっていません。
おそらく、サイズの設定等が間違っていると思われます。

また、
>>BITMAPINFOHEADER構造体と
>>BITMAPFILEHEADER構造体と
>>RGBQUAD構造体を指定してあげて。
>>その順にCFILEでライトしています。
>パレットまでしかない?データ部はきちんと出力していますか?

データ部は出力しています。
記述忘れです。

(1)このデータ部の配列は何バイトになりますか?
(2)どういう羅列になりますか?(1byteに1bitの情報を代入?)
  (座標にたいする配列の関係)


返信引用
Alq3
 Alq3
(@Alq3)
ゲスト
結合: 15年前
投稿: 28
 

>(1)このデータ部の配列は何バイトになりますか?
色の設定に依存します。
2色ビットマップと仮定するとデータ部は16バイトです。
True colorの24ビットのビットマップと仮定すると384バイトです。
パレットは使ってますか?

参考サイト→ http://www.kk.iij4u.or.jp/~kondo/bmp/


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

説明すると長くなりますので、勉強のしかたを書きます。
ビットマップファイルの構造は理解しているようなので、

1.「ペイント」等のアプリで、64[pixl]×2[pixl]のビットマップを
  作成して、保存する。
2.自前のコードで、このファイルを開いて、BITMAPFILEHEADER以下
 を読み込むコードを作成。読み込めるようにする。
3.BITMAPINFOHEADER以下と使用して、BITMAPINFOを作成し、
 読み込んだ画像データと共にしてCreateDIBSection() できるようにする。
4.戻されたHBITMAPが正しく表示できるようにする。
5.上記コードを基に保存コードを作る。

(6)もし、心が折れたら、素直にCImageなどに頼る。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました