プログラミングでの画像の生成について・・・・・・・・
任意の画像をfと呼び,座標(x,y)における画像fの輝度値を(R(x,y),G(x,y),B(x,y))と呼ぶことにします。
以下の処理を行うプログラムを作成してください。
1,画像fの明るさがm分の1になった画像h1(x,y)=(R(x,y)/m,G(x,y)/m,B(x,y)/m)を生成する。
ここで,mは0<m<10の範囲にある任意の整数である.
2,画像fから法256の画像h2(x,y)=((n×R(x,y))mod(256),(n×G(x,y))mod(256),(n×B(x,y))mod(256))を生成する。
ここで,nは任意の正の整数である.
*printfとscanfを使用するためにインクルードする*/
#include<stdio.h>
/*ビットマップ画像を扱うためのヘッダ*/
#include<Dll_BMP_C.h>
//画像ファイル名最大長(バイト)
#define NAME_SIZE 101
int main(void)
{
int j,k;
/* nWidth:画像の幅、nHeight:画像の高さ、nVal:輝度値*/
int nWidth,nHeight;
/*pcFileName:画像ファイル名を保存する配列*/
char pcFileName[NAME_SIZE];
/*pBmpOrig:読み込んだ画像へのポインタ
pBmpCopy:複製した画像へのポインタ*/
DllBmp*pBmpOrig,*pBmpCopy;
/*読み込む画像のファイル名を指定する*/
printf(“読み込む画像”);
scanf(“%s”,pcFileName);
/*画像を読み込みメモリに保存する
読み込みに失敗したら実行を中止する*/
pBmpOrig=DllBmpReadImage(pcFileName);
if(pBmpOrig==NULL)
{
printf(“画像の読み込みに失敗! 実行を中止します\n”);
exit(1);
}
/*読み込んだ画像のヘッダ情報を表示する*/
DllBmpShowHeader(pBmpOrig);
/*読み込んだ画像の大きさを得る*/
nWidth=DllBmpGetWidth(pBmpOrig);
nHeight= DllBmpGetHeight (pBmpOrig);
/* 画像を生成する */
for(j = 0; j < nHeight; j++)
for(k = 0; k < nWidth; k++)
{
DllBmpSetPixelValueR(pBmpOrig, j, k, 255);
DllBmpSetPixelValueG(pBmpOrig, j, k, 255);
DllBmpSetPixelValueB(pBmpOrig, j, k, 255);
}
/*保存する画像のファイル名を指定する*/
printf(“保存する画像”);
scanf(“%s”,pcFileName);
/*画像を保存する
保存に失敗したら実行を中止する*/
if(!DllBmpWriteImage(pcFileName,pBmpOrig));
{
printf(“画像の保存に失敗! 実行に中止します”);
exit(1);
}
/*画像をメモリから消去する*/
DllBmpDleteImage(pBmpOrig);
return 0;
}
剰余は%演算子を使って求めることができると思うのですが・・・。。
処理内容を選択できて、mとnの値を指定できるように作りたいのですが・・・・・
何かアドバイス的なものをすみませんがよろしくお願いします。
お礼
こんばんは! 回答ありがとうございました! その通りにやってみたのですが、どうもうまくいきませんでした。 おそらく、私のプログラム自体に間違いがありそうなので 別途質問するかもしれません。その際何かお気づきの点があればご教授ください ご回答ありがとうございました!!