アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラムを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がまだ使えないのでルーズリーフにいろいろ試行錯誤して書いてるのですが、他に何かヒントがあればよろしくお願いします。。。。。
すみませんがお願いします。

A 回答 (1件)

>>j < nHeightをj < nHeight/2にしたらなるでしょうか??


 この場合だと上半分になってしまうでしょうか??
 はい。左半分の場合はnWidth/2のハズです

一応参考と言う事で(過信してはいけません)。

/*幅の半分を計算しておく*/
const int nHalf = nWidth / 2;

/*輝度用の変数*/
int nKido = 0;

for(j = 0; j < nHeight; j++)
  for(k = 0; k < nWidth; k++)
   {
/*kはnWidthの半分以下なら輝度は0、それ以上なら輝度は255*/
nKido = (nHalf <= k) ? 0 : 255;

/*着色?*/
    DllBmpSetPixelValueR(pBmpOrig, j, k, nKido);
    DllBmpSetPixelValueG(pBmpOrig, j, k, nKido);
    DllBmpSetPixelValueB(pBmpOrig, j, k, nKido);
   }
    • good
    • 0
この回答へのお礼

本当にありがとうございました。

お礼日時:2008/06/23 15:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!