반응형
#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 |