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が機能していない状態です。
知恵を貸していただけると助かります。
Bitmap画像をC言語で編集するには
Re: Bitmap画像をC言語で編集するには
fwriteの第二引数が1なので、1バイトしか書きこまれていません。orzer さんが書きました: fwrite(&fo,1,54,header);
fwrite(&fo,1,size-54,pix);
Re: Bitmap画像をC言語で編集するには
ご指摘ありがとうございます。
whileでの1byteごとの書き込みをそのまま使っていたのが悪かったのですね・・・
修正したところ、画像にノイズ(?)のようなものが出てしまいましたが画像としてみることはできました
青の色値の部分を変えても反映されませんでしたが、バイナリエディタで開いてみたところheader部分はtest1.bmpとtest2.bmpで同じになっていました
whileでの1byteごとの書き込みをそのまま使っていたのが悪かったのですね・・・
修正したところ、画像にノイズ(?)のようなものが出てしまいましたが画像としてみることはできました
青の色値の部分を変えても反映されませんでしたが、バイナリエディタで開いてみたところheader部分はtest1.bmpとtest2.bmpで同じになっていました
Re: Bitmap画像をC言語で編集するには
今後同じような問題で躓く方のためにもどのように解決したのかを記述していただけないでしょうか?orzer さんが書きました:色々試したところ、自己解決できました。
書き込むために状況を整理すると新しい案が出るものですね・・・ありがとうございました。
情報共有のためにもお願いします。
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ