³Ê¹« ¿À·£¸¸¿¡ ¸éÁ¢º¸°í, ±äÀåÀ» ¸¹ÀÌ Çß³ªºÁ¿ä. ³¡³ª°í Ç㹫ÇÔ? ±×¸®°í ±äÀåÇ®·Á¼ ¼Õ¿¡ ÀâÈ÷´ÂÀÏÀÌ ¾ø³×¿ä. ¤¾¤¾
7-8³âÀü ÀÚ·áÀÔ´Ï´Ù.
Á¤¸®ÇÏ´Ù°¡ ³ª¿Í¼ °øºÎÇÏ´Â ÇлýºÐµé °øºÎÇÏ°í Âü°íÇϽöó°í ¿Ã·Áº¾´Ï´Ù. (Âü°í¸¸ ÇØÁÖ¼¼¿ä. ±â¾ïÀÌ ¾È³ª¿ä. ³»¿ë¿¡ ´ëÇØ ¹¯Áö´Â ¸¶¼¼¿ä.)
2Çгâ°úÁ¤Áß¿¡ ºñÆ®¸Ê°ü·Ã ³»¿ëÀÔ´Ï´Ù. Æ®·çÄ÷¯ BMPÆÄÀÏÀ» Ä÷¯256, ±×·¹ÀÌ256, ¹ÙÀ̳ʸ®·Î º¯È¯, °¢ ¹ÝÀü Ãâ·ÂÇÏ´Â °úÁ¦Àεí ÇÕ´Ï´Ù.
¡Ø¸¸¾à ¼Ò½º¸¦ ÆÛ°¡´Â °æ¿ì¿¡´Â Á¤È®ÇÏ°Ô Ãâó¸¦ ½áÁÖ¼¼¿ä.
¾È °è½Ã°ÚÁö¸¸, ÀڷḦ ÀÌ¿ëÇؼ ÇØÇÇÄ·ÆÛ½ºµî °³ÀÎÀÇ ÀÌÀÍÀ» ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù¸é ¹ýÀûÃ¥ÀÓÀ» ¹¯°Ú½À´Ï´Ù.
¡áº¸°í¼ - ¾Æ·¡À̹ÌÁö ȤÀº ¸µÅ©ÀÇ PDF¸¦ È®ÀÎÇϼ¼¿ä.
http://cdn1.ppomppu.co.kr/zboard/data3/2013/1105/1383636960_mult.pdf
or
http://cdn1.ppomppu.co.kr/zboard/data3/2013/1105/1383637037_mult.pdf
¡á¼Ò½º - ¾Æ·¡¼Ò½º ȤÀº ¸µÅ©ÀÇ cpp¸¦ È®ÀÎÇϼ¼¿ä.
http://cdn1.ppomppu.co.kr/zboard/data3/2013/1105/1383637159_invert.cpp
#include
#include
#define WIDTHBYTES(bits) (((bits)+31)/32*4)
#define BYTE unsigned char
//Àü¿ª º¯¼ö
FILE *file;
int rwsize, rwsize2;
BYTE *lpImg;
BYTE *lpOutImg;
BYTE index;
RGBQUAD *pRGB;
BITMAPFILEHEADER hf;
BITMAPINFOHEADER hinfo;
char* output; //Ãâ·ÂÇÒ¶§ ÆÄÀϸí ÀúÀå
void Binary();
void Gray();
void Bitcolor();
void Truecolor();
void main(int argc, char* argv[])
{
int bitcount; // Çȼ¿´ç ºñÆ®¼ö
int clrused; // ÆÈ·¹Æ® »ö»ó¼ö
output= argv[2];
file = fopen(argv[1],"rb");
if(file==NULL){
printf("There is no file!!!n");
exit(1);
}
fread(&hf, sizeof(BITMAPFILEHEADER), 1, file);
if(hf.bfType!=0x4D42){
printf("There is on 'bmp' filen");
exit(1);
}
fread(&hinfo, sizeof(BITMAPINFOHEADER), 1, file);
printf("lmage Size : (%3dx%3d)",hinfo.biWidth ,hinfo.biHeight);
bitcount = hinfo.biBitCount;
clrused = hinfo.biClrUsed;
if(bitcount == 1) // Binary 'BMP'
Binary();
else if(bitcount == 8){ // 8bit/pixel 'BMP'
if(clrused == 0){ // 8bit_Gray 'BMP'
Gray();
}
else if(clrused != 0){ //8bit_Color 'BMP'
Bitcolor();
}
}
else if(bitcount == 24) //24bit(true)_Color 'BMP'
Truecolor();
}
// Binary "BMP' ÇÔ¼ö
void Binary()
{
int i, j;
rwsize = WIDTHBYTES(hinfo.biBitCount * hinfo.biWidth);
rwsize2 = WIDTHBYTES(1 * hinfo.biWidth);
pRGB = (RGBQUAD*)malloc(sizeof(RGBQUAD)*2);
fread(pRGB, sizeof(RGBQUAD), 2, file);
fseek(file, hf.bfOffBits, SEEK_SET);
lpImg = (BYTE*)malloc(rwsize*hinfo.biHeight);
fread(lpImg,sizeof(char),rwsize*hinfo.biHeight, file);
fclose(file);
file = NULL;
lpOutImg = (BYTE*)malloc(rwsize2*hinfo.biHeight);
for(i = 0; i < hinfo.biHeight; i++){<br />
for(j = 0; j < 40 ; j++){<br />
lpOutImg[i*rwsize2 + j] = ~lpImg[i*rwsize + j];
}
}
file = fopen(output,"wb");
fwrite(&hf, sizeof(char), sizeof(BITMAPFILEHEADER), file);
fwrite(&hinfo, sizeof(char), sizeof(BITMAPINFOHEADER), file);
fwrite(pRGB, sizeof(RGBQUAD),2,file);
fwrite(lpOutImg, sizeof(char), rwsize2*hinfo.biHeight, file);
fclose(file);
free(lpOutImg);
free(lpImg);
free(pRGB);
}
// 8bitGray 'BMP' ÇÔ¼ö
void Gray()
{
int i, j;
rwsize = WIDTHBYTES(hinfo.biBitCount * hinfo.biWidth);
rwsize2 = WIDTHBYTES(8 * hinfo.biWidth);
pRGB = (RGBQUAD*)malloc(sizeof(RGBQUAD)*256);
fread(pRGB, sizeof(RGBQUAD), 256, file);
fseek(file, hf.bfOffBits, SEEK_SET);
lpImg = (BYTE*)malloc(rwsize*hinfo.biHeight);
fread(lpImg,sizeof(char),rwsize*hinfo.biHeight, file);
fclose(file);
file = NULL;
lpOutImg = (BYTE*)malloc(rwsize2*hinfo.biHeight);
for(i = 0; i < hinfo.biHeight; i++){<br />
for(j = 0; j < hinfo.biWidth ; j++){<br />
lpOutImg[i*rwsize2 + j] = (BYTE)255 - lpImg[i*rwsize + j];
}
}
file = fopen(output,"wb");
fwrite(&hf, sizeof(char), sizeof(BITMAPFILEHEADER), file);
fwrite(&hinfo, sizeof(char), sizeof(BITMAPINFOHEADER), file);
fwrite(pRGB, sizeof(RGBQUAD),256,file);
fwrite(lpOutImg, sizeof(char), rwsize2*hinfo.biHeight, file);
fclose(file);
free(lpOutImg);
free(lpImg);
free(pRGB);
}
// 8BitColor 'BMP' ÇÔ¼ö
void Bitcolor()
{
int i, j;
rwsize = WIDTHBYTES(hinfo.biBitCount * hinfo.biWidth);
rwsize2 = WIDTHBYTES(8 * hinfo.biWidth);
pRGB = (RGBQUAD*)malloc(sizeof(RGBQUAD)*hinfo.biClrUsed);
fread(pRGB, sizeof(RGBQUAD), hinfo.biClrUsed, file);
fseek (file, hf.bfOffBits, SEEK_SET);
lpImg = (BYTE*)malloc(rwsize*hinfo.biHeight);
fread(lpImg, sizeof(char),rwsize*hinfo.biHeight,file);
fclose(file);
lpOutImg = (BYTE*)malloc(rwsize2*hinfo.biHeight);
for(i = 0; i < hinfo.biHeight; i++){<br />
for(j = 0; j < hinfo.biWidth; j++){<br />
lpOutImg[i*rwsize2 + j] = (BYTE)255-lpImg[i*rwsize + j];
}
}
file = fopen(output,"wb");
fwrite(&hf, sizeof(char), sizeof(BITMAPFILEHEADER), file);
fwrite(&hinfo, sizeof(char), sizeof(BITMAPINFOHEADER), file);
fwrite(pRGB, sizeof(RGBQUAD),hinfo.biClrUsed ,file);
fwrite(lpOutImg, sizeof(char), rwsize2*hinfo.biHeight, file);
fclose(file);
free(lpOutImg);
free(lpImg);
free(pRGB);
}
// TrueColor 'BMP' ÇÔ¼ö
void Truecolor()
{
int i,j;
rwsize = WIDTHBYTES(hinfo.biBitCount * hinfo.biWidth);
rwsize2 = WIDTHBYTES(24 * hinfo.biWidth);
fseek (file, hf.bfOffBits, SEEK_SET);
lpImg = (BYTE*)malloc(rwsize*hinfo.biHeight);
fread(lpImg, sizeof(char),rwsize*hinfo.biHeight,file);
fclose(file);
lpOutImg = (BYTE*)malloc(rwsize2*hinfo.biHeight);
for(i = 0; i < hinfo.biHeight; i++){<br />
for(j = 0; j < hinfo.biWidth; j++){<br />
lpOutImg[i*rwsize2+3*j+2] = 255-lpImg[i*rwsize+3*j+2];
lpOutImg[i*rwsize2+3*j+1] = 255-lpImg[i*rwsize+3*j+1];
lpOutImg[i*rwsize2+3*j] = 255-lpImg[i*rwsize+3*j];
}
}
file = fopen(output,"wb");
fwrite(&hf, sizeof(char), sizeof(BITMAPFILEHEADER), file);
fwrite(&hinfo, sizeof(char), sizeof(BITMAPINFOHEADER), file);
fwrite(lpOutImg, sizeof(char), rwsize2*hinfo.biHeight, file);
fclose(file);
free(lpOutImg);
free(lpImg);
} | |
|