C言語でbitmapを作成
C言語でbitmapを作成
C言語でbitmapファイルを作成して、色をつけて輝度を変えたいと考えてますが
まず、下記のようにファイルをopenして書きこもうと思って適当ですが書いたのですが
ビルドも通りません。
質問なのですが、bitmapを作成して色をつけて輝度を変えることはできるのでしょうか。
ご意見よろしくお願いします。
#include <io.h>
#include <sys\stat.h>
#include <stdio.h>
int main()
{
int fd;
char filename = "test.bmp";
int array[262144];
int kido;
for(int y=0;y<512;y++){
kido=65535;
for(int x=0;x<512;x++){
array[x]=kido;
kido = kido - 128;
}
}
fd = open(filename,O_RDWR,O_BINARY);
write(fd,array,xxx);
close(fd);
まず、下記のようにファイルをopenして書きこもうと思って適当ですが書いたのですが
ビルドも通りません。
質問なのですが、bitmapを作成して色をつけて輝度を変えることはできるのでしょうか。
ご意見よろしくお願いします。
#include <io.h>
#include <sys\stat.h>
#include <stdio.h>
int main()
{
int fd;
char filename = "test.bmp";
int array[262144];
int kido;
for(int y=0;y<512;y++){
kido=65535;
for(int x=0;x<512;x++){
array[x]=kido;
kido = kido - 128;
}
}
fd = open(filename,O_RDWR,O_BINARY);
write(fd,array,xxx);
close(fd);
Re: C言語でbitmapを作成
main関数のカッコの対応が一致していません。
また、識別子xxxが宣言されていないようです。
これがソースコード全体でないならば、ソースコード全体を貼っていただけますか?
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
また、識別子xxxが宣言されていないようです。
これがソースコード全体でないならば、ソースコード全体を貼っていただけますか?
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
はい。yutaka さんが書きました:質問なのですが、bitmapを作成して色をつけて輝度を変えることはできるのでしょうか。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
提示されたソースコードっぽい文字列は、変数filenameの型も不適切なようですね。
「一般的な」(標準ライブラリ関数であり、入門サイト/本でより早い段階で解説されている気がする)
fopen、fwrite、fcloseではなく、open、write、close関数を採用した理由はありますか?
「一般的な」(標準ライブラリ関数であり、入門サイト/本でより早い段階で解説されている気がする)
fopen、fwrite、fcloseではなく、open、write、close関数を採用した理由はありますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
ビットマップデータの形式は、bmpファイルだけではありません。初級者 さんが書きました:bmpファイルには、あらかじめ定まっている
ファイルフォーマットがあります。
当然ご存じですよね?
他の例:PNM (画像フォーマット) - Wikipedia
このフォーマットにも決められた形式はありますが、
質問者独自のフォーマットでbitmapデータが格納されたファイルを作りたい可能性もまだ否定できません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
なんだか深読みしすぎっぽい感じが
します。
まあ、それはさておき、
あのコードを読む限り、
(広く知られている)
bmpファイルの形式を
理解しているとは、
とても思えませんでした。
します。
まあ、それはさておき、
あのコードを読む限り、
(広く知られている)
bmpファイルの形式を
理解しているとは、
とても思えませんでした。
Re: C言語でbitmapを作成
ごめんなさい。初級者 さんが書きました:なんだか深読みしすぎっぽい感じが
します。
ソースコード(仮)中に"test.bmp"とあるので、BMPファイルを作りたいと予想できますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
確かにそのとおりです。とりあえず書いちゃいました。初級者 さんが書きました:なんだか深読みしすぎっぽい感じが
します。
まあ、それはさておき、
あのコードを読む限り、
(広く知られている)
bmpファイルの形式を
理解しているとは、
とても思えませんでした。
参考になるようなものがありましたらご意見おねがいします。
Re: C言語でbitmapを作成
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
とりあえず、提示されたソースコードをC99としてコンパイル可能な状態にしました。
#include <unistd.h>
#include <fcntl.h>
int main(void)
{
int fd;
const char* filename = "test.bmp";
int array[262144];
int kido;
size_t xxx = 0;
for(int y=0;y<512;y++){
kido=65535;
for(int x=0;x<512;x++){
array[x]=kido;
kido = kido - 128;
}
}
fd = open(filename,O_RDWR,O_BINARY);
write(fd,array,xxx);
close(fd);
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
fwriteを使うとfprintfを使わなくてはいけないかと思ってwriteを使いました。みけCAT さんが書きました:提示されたソースコードっぽい文字列は、変数filenameの型も不適切なようですね。
「一般的な」(標準ライブラリ関数であり、入門サイト/本でより早い段階で解説されている気がする)
fopen、fwrite、fcloseではなく、open、write、close関数を採用した理由はありますか?
Re: C言語でbitmapを作成
write関数ないのxxxですが、引数わからなくxxxと記述してしまいました。みけCAT さんが書きました:main関数のカッコの対応が一致していません。
また、識別子xxxが宣言されていないようです。
これがソースコード全体でないならば、ソースコード全体を貼っていただけますか?
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
Re: C言語でbitmapを作成
ということは、Cのコードを書く前に、yutaka さんが書きました: 確かにそのとおりです。とりあえず書いちゃいました。
他にすべきことがある、ということに
なりますね。
そちらを先に片づけましょう。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語でbitmapを作成
よく分からず書かれているらしいと言うことは理解出来ましたので、次のような段階を踏むべきかと思います。
1.fprintfで書きだすテキストファイルとfwriteで書きだすバイナリファイルの違いを勉強する。バイナリエディタの使い方も理解する。
※ 今回open、write、close関数を使う必要はないです。
2.intやshortを含む構造体など自在にバイナリファイルとして書き出し読み込みが出来るプログラムを書けるように成る。 【修正】
3.bmpファイルのバイナリフォーマットを理解する。他のツールで作ったbmpのダンプツールなどを作ってみる。
4.思い通りのbmpファイルの出力プログラムを作成する。
1.fprintfで書きだすテキストファイルとfwriteで書きだすバイナリファイルの違いを勉強する。バイナリエディタの使い方も理解する。
※ 今回open、write、close関数を使う必要はないです。
2.intやshortを含む構造体など自在にバイナリファイルとして書き出し読み込みが出来るプログラムを書けるように成る。 【修正】
3.bmpファイルのバイナリフォーマットを理解する。他のツールで作ったbmpのダンプツールなどを作ってみる。
4.思い通りのbmpファイルの出力プログラムを作成する。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語でbitmapを作成
TSXBINの詳細情報 : Vector ソフトを探す!
このソフトを利用すると、(よく利用されると思われる)BMPファイルの構造をわかりやすく表示してくれるので、
BMPファイルの構造を理解しやすくなります。
また、この時、RGB(82,71,66)という色を用いると、各色を0x00~0xFFの整数で表す時
(これはほとんどのBMPファイルの形式で利用される表し方です)、
赤がR、緑がG、青がBを表すASCIIコードのデータになるので、データと色の関係がわかりやすくなります。
このソフトを利用すると、(よく利用されると思われる)BMPファイルの構造をわかりやすく表示してくれるので、
BMPファイルの構造を理解しやすくなります。
また、この時、RGB(82,71,66)という色を用いると、各色を0x00~0xFFの整数で表す時
(これはほとんどのBMPファイルの形式で利用される表し方です)、
赤がR、緑がG、青がBを表すASCIIコードのデータになるので、データと色の関係がわかりやすくなります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: C言語でbitmapを作成
回答ありがとうございます。softya(ソフト屋) さんが書きました:よく分からず書かれているらしいと言うことは理解出来ましたので、次のような段階を踏むべきかと思います。
1.fprintfで書きだすテキストファイルとfwriteで書きだすバイナリファイルの違いを勉強する。バイナリエディタの使い方も理解する。
※ 今回open、write、close関数を使う必要はないです。
2.intやshortを含む構造体など自在にバイナリファイルとして書き出し読み込みが出来るプログラムを書けるように成る。 【修正】
3.bmpファイルのバイナリフォーマットを理解する。他のツールで作ったbmpのダンプツールなどを作ってみる。
4.思い通りのbmpファイルの出力プログラムを作成する。
1~4.自分なりに調べてこちらで勉強した結果報告しますので確認していただけますか。
よろしくお願いします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語でbitmapを作成
> 1~4.自分なりに調べてこちらで勉強した結果報告しますので確認していただけますか。
いつでもOKです。
ソースコードやら、理解できたこと、実行結果(16進数ダンプ)などなどを添えられたほうが良いと思います。
1~4.バラバラで構いません。
いつでもOKです。
ソースコードやら、理解できたこと、実行結果(16進数ダンプ)などなどを添えられたほうが良いと思います。
1~4.バラバラで構いません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。