あくまでアドバイスです(過信しないでください)。
/*
画像fの明るさがm分の1になった画像h1(x,y)=(R(x,y)/m,G(x,y)/m,B(x,y)/m)を生成する。
*/
static void DoH1(DllBmp* pBmpOrig, int m)
{
int r = 0;
int g = 0;
int b = 0;
/*なるべく変更してはまずいものにはconstを付けます*/
const int nWidth = DllBmpGetWidth(pBmpOrig);
const int nHeight= DllBmpGetHeight(pBmpOrig);
/*0<m<10を実行(今回は中でする)*/
if(m < 0)m = 0;
if(m >= 10)m = 10;
/* 画像を生成する */
for(j = 0; j < nHeight; j++)
for(k = 0; k < nWidth; k++)
{
/*色彩の輝度を取り出す*/
r = DllBmpGetPixelValueR(pBmpOrig, j, k);
g = DllBmpGetPixelValueG(pBmpOrig, j, k);
b = DllBmpGetPixelValueB(pBmpOrig, j, k);
/*輝度の設定*/
DllBmpSetPixelValueR(pBmpOrig, j, k, r / m);
DllBmpSetPixelValueG(pBmpOrig, j, k, g / m);
DllBmpSetPixelValueB(pBmpOrig, j, k, b / m);
}
}
/*
画像fから法256の画像h2(x,y)=((n×R(x,y))mod(256),(n×G(x,y))mod(256),(n×B(x,y))mod(256))を生成する。
*/
static void DoH2(DllBmp* pBmpOrig, int n)
{
int r = 0;
int g = 0;
int b = 0;
/*なるべく変更してはまずいものにはconstを付けます*/
const int nMod = 256;
const int nWidth = DllBmpGetWidth(pBmpOrig);
const int nHeight= DllBmpGetHeight(pBmpOrig);
/* 画像を生成する */
for(j = 0; j < nHeight; j++)
for(k = 0; k < nWidth; k++)
{
/*色彩の輝度を取り出す*/
r = DllBmpGetPixelValueR(pBmpOrig, j, k);
g = DllBmpGetPixelValueG(pBmpOrig, j, k);
b = DllBmpGetPixelValueB(pBmpOrig, j, k);
/*輝度の設定*/
DllBmpSetPixelValueR(pBmpOrig, j, k, (n * r) % nMod);
DllBmpSetPixelValueG(pBmpOrig, j, k, (n * g) % nMod);
DllBmpSetPixelValueB(pBmpOrig, j, k, (n * b) % nMod);
}
}
長くなってきているので関数に置いています。そうした方が、改良や修正取り扱いが楽になります。
キーボードから受け取ったデータを渡して以下のどちらかを呼び出します。
/*キーボードから入力を受け付ける*/
m = get???();
/* 画像を生成する */
DoH1(pBmpOrig, m);
または
DoH2(pBmpOrig, m);
を呼び出す
お礼
ほんとうにありがとうございます。 すごく助かりました。