Bitmap画像をC言語で編集するには

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
orzer

Bitmap画像をC言語で編集するには

#1

投稿記事 by orzer » 14年前

24Bitmap画像をC言語で編集する方法についての質問です。
自分で調べながら
画像1を読み込む→画像2に書き込む(実質的な内容のコピー処理)
ことは出来たのですが、これを
画像1を読み込む→指定箇所のblueを0にする→画像2に書き込む
にするところで躓いています。


#include <stdio.h>
#include <stdlib.h>

int main(void){
FILE *fo,*fw
unsigned char obyte;
int i,size;
size=画像のbyte数を手動で入力

fo=fopen("testa.bmp","r");
fw=fopen("testb.bmp","w");

指定箇所のblueを0にする処理

i = 0;
while(i != size){
fread(&obyte,1, 1, fo);
fwrite(&obyte,1, 1, fw);
}
fclose(fo);
fclose(fw);
}

bmpの知識として、55byteから各位置のRGBデータになるということはわかっていますが

fo=fopen("test1.bmp","r");
fread(header,1,54,fo);
fread(pix,1,size-54,fo);

pix[0][0][0] = 0;(画像の左下のblueを0に)

fw=fopen("test2.bmp","w");
fwrite(&fo,1,54,header);
fwrite(&fo,1,size-54,pix);

のように処理してみても"test2.bmp"の中身が無い=fwriteが機能していない状態です。
知恵を貸していただけると助かります。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: Bitmap画像をC言語で編集するには

#2

投稿記事 by h2so5 » 14年前

orzer さんが書きました: fwrite(&fo,1,54,header);
fwrite(&fo,1,size-54,pix);
fwriteの第二引数が1なので、1バイトしか書きこまれていません。

orzer

Re: Bitmap画像をC言語で編集するには

#3

投稿記事 by orzer » 14年前

ご指摘ありがとうございます。
whileでの1byteごとの書き込みをそのまま使っていたのが悪かったのですね・・・
修正したところ、画像にノイズ(?)のようなものが出てしまいましたが画像としてみることはできました
青の色値の部分を変えても反映されませんでしたが、バイナリエディタで開いてみたところheader部分はtest1.bmpとtest2.bmpで同じになっていました

orzer

Re: Bitmap画像をC言語で編集するには

#4

投稿記事 by orzer » 14年前

色々試したところ、自己解決できました。
書き込むために状況を整理すると新しい案が出るものですね・・・ありがとうございました。

アバター
asd
記事: 319
登録日時: 14年前

Re: Bitmap画像をC言語で編集するには

#5

投稿記事 by asd » 14年前

orzer さんが書きました:色々試したところ、自己解決できました。
書き込むために状況を整理すると新しい案が出るものですね・・・ありがとうございました。
今後同じような問題で躓く方のためにもどのように解決したのかを記述していただけないでしょうか?
情報共有のためにもお願いします。
Advanced Supporting Developer
無理やりこじつけ(ぉ

閉鎖

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