반응형
#include<stdio.h>
#define W 1024
#define H 768
#define head 54

FILE *fp1, *fp2; // 파일 처리용 구조체 변수  
unsigned char R[H][W], G[H][W], B[H][W];
void bmp_open(char s[20], char t[20]){ 
	fp1 = fopen(s,"rb"); // 바이너리 읽기 모드로 파일 열기 
	fp2 = fopen(t,"wb"); // 바이너리 쓰기 모드로 파일 열기  
}

void bmp_close()
{
	fclose(fp1);
	fclose(fp2);
}

void head_copy()
{
	unsigned char t;
	for(int i=0; i<head; i++)
	{
		t = getc(fp1); //gets() : 1byte를 입력받는 함수 
		putc(t,fp2); //puts() :1byte를 출력하는 함수  
	}
}

void bmp_read()
{
	for(int i=0; i<H; i++){ // 열 
		for(int j = 0; j<W; j++){ //행 
			B[i][j] = getc(fp1);
			G[i][j] = getc(fp1);
			R[i][j] = getc(fp1);
		}
	}
}

void bmp_write()
{
	for(int i=0; i<H; i++){
		for(int j = 0; j<W; j++){
				B[i][j] = getc(fp1);
				G[i][j] = getc(fp1);
				R[i][j] = getc(fp1);
			}
	}
}

void filter(float r, float g, float b)
{
	for(int i=0; i<H; i++){
		for(int j = 0; j<W; j++){
				B[i][j] = (int)(B[i][j]*b/100);
				G[i][j] = (int)(G[i][j]*g/100);
				R[i][j] = (int)(R[i][j]*r/100);
			}
	}
	
	for(int i=0; i<H; i++){
		for(int j = 0; j<W; j++){
				putc(B[i][j], fp2);
				putc(G[i][j], fp2);
				putc(R[i][j], fp2);
			
			}
	}
}

int main(){
	bmp_open("rgb.bmp", "filter.bmp");
	head_copy();
	bmp_read();
	
	filter(10, 20, 80); // r,g,b percentage 
	bmp_write();
	bmp_close();
}

반응형

'2019~2020 > 정보 과학' 카테고리의 다른 글

리스트,스택, 큐의 삽입, 삭제  (0) 2019.09.06
재귀함수  (0) 2019.08.30
피보나치 수열 값 출력하기  (0) 2019.08.30
상항식, 하향식 재귀  (0) 2019.08.23
별찍기  (0) 2019.08.23

+ Recent posts