正方形の中に正方形を出力する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ききききき

正方形の中に正方形を出力する

#1

投稿記事 by ききききき » 2年前

課題についてお聞きしたいです。課題は以下になります。
一辺の長さが256の正方形で、正方形の中央の128*128の部分のピクセル値が"255"で、それ以外の領域のピクセル値が"0"の8bitの画像を新規に作成し、任意のファイル名で出力するプログラムうを作成しなさい。

ここまではソースコードを書くことができました。題意の正方形を出力する核の部分(二重for文の中身)がわかりません。どなたかよろしくお願いします。

コード:

 
 #include"common.h"

int main(int argc, char* argv[]) {
	unsigned char* OutImage;
	int Xsize, Ysize, i, j;
	char OutFile[200];

	if (argc != 2) {
		printf("1)プログラム名\n");
		printf("2)出力ファイル名\n");
		exit(0);
	}
	strcpy(OutFile, argv[1]);

	Xsize = 256;
	Ysize = 256;

	OutImage = new unsigned char[Xsize * Ysize];

	for (i = 0; i < Ysize; i++) {
		for (j = 0; j < Xsize; j++) {
			
		}
	}

	Write8bitImage(OutFile, OutImage, Xsize, Ysize);

	delete[]OutImage;
	return 0;
}
 

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 正方形の中に正方形を出力する

#2

投稿記事 by みけCAT » 2年前

コード:

	for (i = 0; i < Ysize; i++) {
		for (j = 0; j < Xsize; j++) {
			if (iとjが表す位置が正方形の内部である) {
				iとjが表す位置のピクセル値を255にする;
			} else {
				iとjが表す位置のピクセル値を0にする;
			}
		}
	}
という感じのプログラムにするといいと思います。
この中でわからない部分はありますか?
オフトピック

コード:

	char OutFile[200];
	strcpy(OutFile, argv[1]);
この部分は、argv[1]を直接ファイル名として使えばいいのに、無駄にデータのコピーを行い、無駄にバッファオーバーランを起こすリスクを生んでいますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ききききき

Re: 正方形の中に正方形を出力する

#3

投稿記事 by ききききき » 2年前

回答ありがとうございます。
iとjが表す位置が正方形の内部であるの表し方をその考え方から理解できてないです。。。

コード:

 
 for (i = 0; i < Ysize; i++) {
		for (j = 0; j < Xsize; j++) {
			if (iとjが表す位置が正方形の内部である) {
				OutImage[i * Xsize + j] = 255;
			} else {
				OutImage[i * Xsize + j] = 0;
			}
		}
	}
 

アバター
usao
記事: 1887
登録日時: 11年前

Re: 正方形の中に正方形を出力する

#4

投稿記事 by usao » 2年前

> iとjが表す位置が正方形の内部であるの表し方をその考え方から理解できてないです

(i,j) = (0,0) のとき,これは「正方形の内部」ですか? それとも「外部」なのですか?
(i,j) = (100,55) ならばどうですか?
(i,j) = (127,132) ならどうですか?


これらに答えられるならば,どうやって答えを導いたのか? を自問してみればどうか.

きききき

Re: 正方形の中に正方形を出力する

#5

投稿記事 by きききき » 2年前

ご返信ありがとうございます!
解決することができました。ありがとうございます。

返信

“C言語何でも質問掲示板” へ戻る