TIL ) 이미지 파일 만들기 실습 - 사각형에 사각형

지난번 실습과 난이도 자체는 비슷했다. 저번 실습을 무난하게 진행했기에 이번 실습도 무난하게 진행할 수 있었다.

1) 사각형에 사각형 그리기

conditions

  • 민트색 배경(사각형)에 노란 사각형을 추가한다.
  • 민트색의 색깔은 #ADEFD1FF이다.
  • 추가되는 사각형 좌측 상단 모서리의 위치는 (20, 30), 오른쪽 하단 모서리의 위치는 (70, 80)이다.

code

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;
void Make_PPM(const string& fname, const vector<uint8_t>& pixel, const int& width, const int& height);

int main()
{
	//Write PPM
	const string filename = "Example_Sqaures.PPM";
	const int image_width = 128;
	const int image_height = 128;
	const int vector_width_start = 20;
	const int vector_width_end = 70;
	const int vector_height_start = 30;
	const int vector_height_end = 80;

	vector<uint8_t> buffer(image_width * image_height * 3);

	for (int j = 0; j < image_height;j++)
	{
		for (int i = 0; i < image_width;i++)
		{
			const int offset = (i + j * image_height) * 3;
			if ( (j >= vector_height_start) && (j <= vector_height_end) && (i>= vector_width_start) && (i<= vector_width_end))
			{
				buffer[offset] = 255;
				buffer[offset + 1] = 255;
				buffer[offset + 2] = 0;
			}
			else
			{
				buffer[offset] = 0xAD;
				buffer[offset + 1] = 0xEF;
				buffer[offset + 2] = 0xD1;
			}
		}
	}

	Make_PPM(filename, buffer, image_width, image_height);
	return 0;
}

void Make_PPM(const string& fname, const vector<uint8_t>& pixel, const int& width, const int& height)
{
	ofstream ofile(fname);

	ofile << "P3\n" << width << " " << height << "\n255\n";

	for (int j = 0; j < height; j++)
	{
		for (int i = 0; i < width; i++)
		{
			const int offset = (i + j * width) * 3;
			for (int c = 0; c < 3; c++)
			{
				// uint8_t -> casting to int when ofile
				ofile << (int)pixel[offset + c];
				ofile << " ";
			}
		}
		ofile << "\n";
	}
	ofile << flush;
}

Review

  • 1바이트 무부호 정수(uint8_t)를 cout하거나 ofstream을 이용하여 '출력'하려 할때는 (int)로 casting해주는 과정이 필요했다. 이게 안되니까 화면이 검은색으로 뒤집어짐.

Output

![]

좋은 웹페이지 즐겨찾기