- ベストアンサー
プログラミングでの画像の生成について
- プログラミングで画像の生成を行う際に、明るさの調整や色の変換をするプログラムを作成する方法についての質問です。
- 具体的には、画像の輝度値を使って明るさを調整したり、色相を変えたりする方法について知りたいと思っています。
- また、プログラム内でのビットマップ画像の扱い方や、ファイルの読み込みと保存についても教えていただけると助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
あくまでアドバイスです(過信しないでください)。 /* 画像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); を呼び出す
お礼
ほんとうにありがとうございます。 すごく助かりました。