プログラムを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がまだ使えないのでルーズリーフにいろいろ試行錯誤して書いてるのですが、他に何かヒントがあればよろしくお願いします。。。。。
すみませんがお願いします。
No.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);
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- WordPress(ワードプレス) ホームページの画像が入れ替わらない 3 2022/12/24 16:00
- Excel(エクセル) EXCELマクロでandroidタブレットから取りんだJPEGファイルをうまくセルに貼り付けられない 2 2022/07/31 15:03
- YouTube ユーチューブへの動画投稿にサムネイルを付ける方法は? 1 2022/07/21 23:45
- フリーソフト 倍率自動調整して全画面表示できるフリーの画像ビューアー 1 2023/08/24 10:55
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UWSC「画像が無い場合」
-
uwscについて質問です。
-
UWSC 画像判定と条件分岐について
-
uwscの画像認識に失敗します。
-
UWSCの画像認識と条件分岐につ...
-
画像のピクセルデータの取得
-
jqueryスライダーを2段でスライ...
-
UWSC 画像認識で条件分岐
-
C++Builder5で画像の結合
-
UWSCでループ処理がうまくいき...
-
画像のビット数を変更する方法
-
uwcs のマクロで画像認識をして...
-
画像の輝度値のプログラムにつ...
-
EXCEL VBA 複数のImageコントロ...
-
vb.net 画像の透過について
-
【WPF】画像の切り替え
-
HTMLでサイトの模写をしていま...
-
UWSCで次のように処理したいの...
-
画像認識アルゴリズムについて
-
UWSCの色判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【EXCEL VBA】ダブルクリックで...
-
背景画像の繰り返しについて
-
EXCEL VBA 複数のImageコントロ...
-
「using Windows」でエラーが出る
-
jqueryスライダーを2段でスライ...
-
画像のピクセルデータの取得
-
ImageMagickでgif画像の一部が...
-
Excel ユーザーフォームで表示...
-
uwcs のマクロで画像認識をして...
-
uwscの画像認識に失敗します。
-
vb.net 画像の透過について
-
VBA シート毎に画像挿入
-
UWSC 画像判定と条件分岐について
-
UWSC「画像が無い場合」
-
gif 画像上の ボタンに リン...
-
Pythonでgif画像が上手く作れない
-
VBAのユーザーフォームのイメー...
-
UWSC 画像認識で条件分岐
-
パネルに画像
-
【WPF】画像の切り替え
おすすめ情報