»Ë»Ñ Æ÷·³

ÄÄÇ»ÅÍ °øÇÐ - ¸ÖƼ¹Ìµð¾î(ºñÆ®¸Ê ó¸®)

  • ¸Ç½´¸Ó
  • µî·ÏÀÏ 2013-11-05 16:39
  • Á¶È¸¼ö 1939
³Ê¹« ¿À·£¸¸¿¡ ¸éÁ¢º¸°í, ±äÀåÀ» ¸¹ÀÌ Çß³ªºÁ¿ä. ³¡³ª°í Ç㹫ÇÔ? ±×¸®°í ±äÀåÇ®·Á¼­ ¼Õ¿¡ ÀâÈ÷´ÂÀÏÀÌ ¾ø³×¿ä. ¤¾¤¾

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);
}

0
ÃßõÇϱ⠴ٸ¥ÀÇ°ß 0
ºÏ¸¶Å©¹öÆ° °øÀ¯¹öÆ°
÷ºÎÆÄÀÏ
  • ¾Ë¸² ¿å¼³, »óó ÁÙ ¼ö ÀÖ´Â ¾ÇÇÃÀº »ï°¡ÁÖ¼¼¿ä.
©¹æ »çÁø  
¡â ÀÌÀü±Û¡ä ´ÙÀ½±Û