画像の輝度値のプログラムについて・・・・・・
プログラムをPCでやる前にある程度、何かに書いてからやっているのですが、画像の1部分の色を変えたいのですが、例えば画像の左半分を黒くした画像を生成したい場合は,(一般的には,輝度値は0~255までの整数(8ビット)か,または0~65535までの整数(16ビット)により表される)
*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;
}
画像の輝度値を操作するプログラムをやっているのですが、画像の左半分を黒くした画像を生成する場合は、
DllBmpSetPixelValueR(pBmpOrig, j, k, 255);
DllBmpSetPixelValueG(pBmpOrig, j, k, 255);
DllBmpSetPixelValueB(pBmpOrig, j, k, 255);
の部分のRが赤、Gが緑、Bが青なんですが、その値をすべて0にすればいいんでしょうか?もしくはあらたに条件式を作るべきなのでしょうか??そして画像の左半分を黒くしたい場合は、
for(j = 0; j < nHeight; j++)
for(k = 0; k < nWidth; k++)
の部分のj < nHeightをj < nHeight/2にしたらなるでしょうか??
この場合だと上半分になってしまうでしょうか??
PCがまだ使えないのでルーズリーフにいろいろ試行錯誤して書いてるのですが、他に何かヒントがあればよろしくお願いします。。。。。
すみませんがお願いします。
お礼
ありがとうございます。 すべてのレイヤーに対して”注目する1ドットだけを切り抜く”ということが難しいですね. 参考にさせていただきます。