C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[49261] Re:비트맵 파일 외각선 추출 관련
장성호 [nasilso] 2256 읽음    2007-05-14 21:02
의견 몇가지.....

1.  님의 코드에는 FILE *fp  에서 BMP_DATA rgb[] 배열로 fread하는 부분이 없네요


2.  그리고 님처럼 코딩하시려면 bitmap 파일 format 을 정확히 아셔야 합니다.

     저도 bitmap file format에 대해서는 잘모릅니다만    

      file로 부터 읽어올때 맨처음부터 rgb값으로  3byte씩 되어있지 않습니다.  
     그리고 모든 bmp파일이라고 같은 형식도 아니구요

     파일의  맨 첫부분에  bmp header가 있는데..
     header에  bitmap의 width 와 height , offset 등의 정보가 있습니다.

     그리고 실제로 rgb순으로 file에 기록되지 않구요
     또한 data가 맨첫번째 line부터 기록되지도 않습니다.

     아래는 bitmap header입니다. 참조하세요


// bitmap header
#define __u32 unsigned int
#define __u16   unsigned short

#pragma pack(push,1)                      // builder에서 comfile하려면 꼭해줘야함


struct BMP_DATA                    // 비트맵 RGB값 ,  순서가 바뀜
{
    BYTE    b;
    BYTE    g;
    BYTE    r; 
};


typedef struct bmp_header {
/* Header */
char signature[2];
__u32 file_size;
__u32 reserved;
__u32 data_offset;
/* InfoHeader */
__u32 size;
__u32 width;
__u32 height;
__u16 planes;
__u16 bit_count;
__u32 compression;
__u32 image_size;
__u32 x_pixels_per_m;
__u32 y_pixels_per_m;
__u32 colors_used;
__u32 colors_important;
/* ColorTable */

} bmp_header_t;

#pragma pack(pop)



3. 다음 정상적으로 file에서 한 line씩 data를 읽어왔을경우에...    
      코딩에 문제가 없다고 가정하구요

     3-1)  bitmap파일의 image가  한 가운데에 하얀색이 있는 경우는 어떻게 되나요?
             ==> 안쪽에 라인은 못찾겠네요

     3-2) image가 왼쪽에는 색상이 있고 오른쪽에 가서 흰색(배경색)으로 바뀐다면?
             ==> 왼쪽 외각선은 찾겠지만 오른쪽 외각선은 못찾을것 같으데요..

     색상이 흰색에서 검은색이든 , 검은색에서 흰색이든 변화하는 부분을 모두 찾아야 할것 같은데요...

4. 또하나 맨마지막 while문안에   검은색인지 흰색인지 비교구문( if 문 ) 에서
    || 가 아니라 && 로 바뀌어야 할것 같은데요
    셋중에 하나만 255 인경우가 아니라 grb값 셋 모두 255 이어야 흰색이구
    셋다 0 이어야 검은색이니까요...

그럼 즐플하세요


정구일 님이 쓰신 글 :
: 안녕하세요.
: 비트맵 파일 외각선 추출에 관해서 질문이 있어서 이렇게 질문드립니다.
: 비트맵 파일을 불러와서 외각선을 추출해야 합니다.
: 그래서 bmp 파일 rgb 값을 사용하여 외각선을 추출하려고 합니다.
: 방법은 우선 배경은 하얀색이라는 가정을 두고 시작했습니다.
: 배경이 하얀색이기 때문에 하얀색 이외의 색은 모두 검은색으로 만듭니다.
: 그리고 rgb 값을 읽어 하얀색 rgb 값 다음 rgb 값이 검은색이면
: 그 곳이 경계선이 되게 했습니다.
: 그런데 약간의 문제가 있는지 생각 처럼 잘 되지 않습니다.
: 무엇이 잘 못 되었는지 봐주시면 감사하겠습니다.
:
: /*
:     비트맵 파일 이미지를 불러와서 그 이미지에 외각선을 추출한다.
:     그 이미지에 배경색은 하얀색이다.
: */
:
: #include <stdio.h>
:
: #define BYTE unsigned char
: #define MAX 1000                // 비트맵에 크기를 자동으로 계산 하는 방법을 모르겠습니다.
:
: struct BMP_DATA                    // 비트맵 RGB값
: {
:     BYTE    r;
:     BYTE    g;
:     BYTE    b;
: };
:
: void main()
: {
:     static struct BMP_DATA rgb[MAX];
:     int i = 0;
:     FILE *fp;
:     fp = fopen ("test.bmp", "w");
:
:     while (i < MAX)                // 비트맵 배경이 하얀색이지만 완전 하얀색이 아닐수 있으므로 완전 하얀색을 만든다.
:     {
:         if (rgb[i].r > 220)
:         {
:             rgb[i].r = 255;
:         }
:         if (rgb[i].g > 220)
:         {
:             rgb[i].g = 255;
:         }
:         if (rgb[i].b > 220)
:         {
:             rgb[i].b = 255;
:         }
:         i++;
:     }
:
:     while (i < MAX)                // 배경이 아니라면 검은색으로 바꾼다.
:     {
:         if (rgb[i].r != 255)
:         {
:             rgb[i].r = 0;
:         }
:         if (rgb[i].g != 255)
:         {
:             rgb[i].g = 0;
:         }
:         if (rgb[i].b != 255)
:         {
:             rgb[i].b = 0;
:         }
:         i++;
:     }
:
:     while (i < MAX)                // 하얀색 다음 검은색이라면 그 곳이 경계 이므로 색을 바꾼다.
:     {
:         if (rgb[i].r == 255 || rgb[i].g == 255 || rgb[i].b == 255)
:         {
:             if (rgb[i+1].r == 0 || rgb[i+1].g == 0 || rgb[i+1].b == 0)
:             {
:                 rgb[i].r = 100;
:                 rgb[i].g = 100;
:                 rgb[i].b = 100;
:             }
:         }
:         i++;
:     }
:     fclose(fp);
: }

+ -

관련 글 리스트
49245 비트맵 파일 외각선 추출 관련 정구일 1866 2007/05/14
49271     Re:비트맵 파일 외각선 추출 관련 2456 2007/05/16
49278         Re:Re:비트맵 파일 외각선 추출 관련 정구일 1593 2007/05/16
49283             Re:Re:Re:비트맵 파일 외각선 추출 관련 1455 2007/05/17
49290                 Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 정구일 1422 2007/05/17
49293                     Re:Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 1292 2007/05/17
49299                         Re:Re:Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 정구일 1295 2007/05/17
49301                             Re:Re:Re:Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 1374 2007/05/18
49302                                 Re:Re:Re:Re:Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 정구일 1405 2007/05/18
49300                             Re:Re:Re:Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 1311 2007/05/18
49284                 Re:Re:Re:Re:비트맵 파일 외각선 추출 관련 - scanline으로 하면 빨라요 장성호 1684 2007/05/17
49261     Re:비트맵 파일 외각선 추출 관련 장성호 2256 2007/05/14
49270         Re:Re:비트맵 파일 외각선 추출 관련 정구일 1453 2007/05/15
49257     Re:비트맵 파일 외각선 추출 관련 머슴.한석복 2109 2007/05/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.