C言語でbitmapを作成

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
yutaka
記事: 5
登録日時: 6年前

C言語でbitmapを作成

#1

投稿記事 by yutaka » 6年前

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);

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

Re: C言語でbitmapを作成

#2

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

main関数のカッコの対応が一致していません。
また、識別子xxxが宣言されていないようです。
これがソースコード全体でないならば、ソースコード全体を貼っていただけますか?
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: C言語でbitmapを作成

#3

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

yutaka さんが書きました:質問なのですが、bitmapを作成して色をつけて輝度を変えることはできるのでしょうか。
はい。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 10年前

Re: C言語でbitmapを作成

#4

投稿記事 by 初級者 » 6年前

bmpファイルには、あらかじめ定まっている
ファイルフォーマットがあります。
当然ご存じですよね?

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

Re: C言語でbitmapを作成

#5

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

提示されたソースコードっぽい文字列は、変数filenameの型も不適切なようですね。

「一般的な」(標準ライブラリ関数であり、入門サイト/本でより早い段階で解説されている気がする)
fopen、fwrite、fcloseではなく、open、write、close関数を採用した理由はありますか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: C言語でbitmapを作成

#6

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

初級者 さんが書きました:bmpファイルには、あらかじめ定まっている
ファイルフォーマットがあります。
当然ご存じですよね?
ビットマップデータの形式は、bmpファイルだけではありません。
他の例:PNM (画像フォーマット) - Wikipedia
このフォーマットにも決められた形式はありますが、
質問者独自のフォーマットでbitmapデータが格納されたファイルを作りたい可能性もまだ否定できません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

初級者
記事: 200
登録日時: 10年前

Re: C言語でbitmapを作成

#7

投稿記事 by 初級者 » 6年前

なんだか深読みしすぎっぽい感じが
します。

まあ、それはさておき、
あのコードを読む限り、
(広く知られている)
bmpファイルの形式を
理解しているとは、
とても思えませんでした。

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

Re: C言語でbitmapを作成

#8

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

初級者 さんが書きました:なんだか深読みしすぎっぽい感じが
します。
ごめんなさい。
ソースコード(仮)中に"test.bmp"とあるので、BMPファイルを作りたいと予想できますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

yutaka
記事: 5
登録日時: 6年前

Re: C言語でbitmapを作成

#9

投稿記事 by yutaka » 6年前

初級者 さんが書きました:なんだか深読みしすぎっぽい感じが
します。

まあ、それはさておき、
あのコードを読む限り、
(広く知られている)
bmpファイルの形式を
理解しているとは、
とても思えませんでした。
確かにそのとおりです。とりあえず書いちゃいました。
参考になるようなものがありましたらご意見おねがいします。

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

Re: C言語でbitmapを作成

#10

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

yutaka さんが書きました:参考になるようなものがありましたらご意見おねがいします。
とりあえず、このあたりでしょうか。
画像処理におけるアルゴリズム
BMPファイルのフォーマット
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

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

Re: C言語でbitmapを作成

#11

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

とりあえず、提示されたソースコードを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で殴ればいい!(死亡フラグ)

yutaka
記事: 5
登録日時: 6年前

Re: C言語でbitmapを作成

#12

投稿記事 by yutaka » 6年前

みけCAT さんが書きました:提示されたソースコードっぽい文字列は、変数filenameの型も不適切なようですね。

「一般的な」(標準ライブラリ関数であり、入門サイト/本でより早い段階で解説されている気がする)
fopen、fwrite、fcloseではなく、open、write、close関数を採用した理由はありますか?
fwriteを使うとfprintfを使わなくてはいけないかと思ってwriteを使いました。

yutaka
記事: 5
登録日時: 6年前

Re: C言語でbitmapを作成

#13

投稿記事 by yutaka » 6年前

みけCAT さんが書きました:main関数のカッコの対応が一致していません。
また、識別子xxxが宣言されていないようです。
これがソースコード全体でないならば、ソースコード全体を貼っていただけますか?
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
write関数ないのxxxですが、引数わからなくxxxと記述してしまいました。

初級者
記事: 200
登録日時: 10年前

Re: C言語でbitmapを作成

#14

投稿記事 by 初級者 » 6年前

yutaka さんが書きました: 確かにそのとおりです。とりあえず書いちゃいました。
ということは、Cのコードを書く前に、
他にすべきことがある、ということに
なりますね。
そちらを先に片づけましょう。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: C言語でbitmapを作成

#15

投稿記事 by softya(ソフト屋) » 6年前

よく分からず書かれているらしいと言うことは理解出来ましたので、次のような段階を踏むべきかと思います。
1.fprintfで書きだすテキストファイルとfwriteで書きだすバイナリファイルの違いを勉強する。バイナリエディタの使い方も理解する。
※ 今回open、write、close関数を使う必要はないです。
2.intやshortを含む構造体など自在にバイナリファイルとして書き出し読み込みが出来るプログラムを書けるように成る。 【修正】
3.bmpファイルのバイナリフォーマットを理解する。他のツールで作ったbmpのダンプツールなどを作ってみる。
4.思い通りのbmpファイルの出力プログラムを作成する。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

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

Re: C言語でbitmapを作成

#16

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

TSXBINの詳細情報 : Vector ソフトを探す!
このソフトを利用すると、(よく利用されると思われる)BMPファイルの構造をわかりやすく表示してくれるので、
BMPファイルの構造を理解しやすくなります。
また、この時、RGB(82,71,66)という色を用いると、各色を0x00~0xFFの整数で表す時
(これはほとんどのBMPファイルの形式で利用される表し方です)、
赤がR、緑がG、青がBを表すASCIIコードのデータになるので、データと色の関係がわかりやすくなります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

yutaka
記事: 5
登録日時: 6年前

Re: C言語でbitmapを作成

#17

投稿記事 by yutaka » 6年前

softya(ソフト屋) さんが書きました:よく分からず書かれているらしいと言うことは理解出来ましたので、次のような段階を踏むべきかと思います。
1.fprintfで書きだすテキストファイルとfwriteで書きだすバイナリファイルの違いを勉強する。バイナリエディタの使い方も理解する。
※ 今回open、write、close関数を使う必要はないです。
2.intやshortを含む構造体など自在にバイナリファイルとして書き出し読み込みが出来るプログラムを書けるように成る。 【修正】
3.bmpファイルのバイナリフォーマットを理解する。他のツールで作ったbmpのダンプツールなどを作ってみる。
4.思い通りのbmpファイルの出力プログラムを作成する。
回答ありがとうございます。
1~4.自分なりに調べてこちらで勉強した結果報告しますので確認していただけますか。

よろしくお願いします。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: C言語でbitmapを作成

#18

投稿記事 by softya(ソフト屋) » 6年前

> 1~4.自分なりに調べてこちらで勉強した結果報告しますので確認していただけますか。

いつでもOKです。
ソースコードやら、理解できたこと、実行結果(16進数ダンプ)などなどを添えられたほうが良いと思います。
1~4.バラバラで構いません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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