|
먼저 여러가지 놓치신게 있지않나 싶군요..
1. 현재 비트맵화일이 칼라정보만가지고 있는 .raw인지요..
2. 비트맵의 bits per pixel이 몇인지요.. 2bit인지 8bit인지 아님 true color인지요..
이것을 하시기전에 bitmap file 구조를 파악하시는게 더 좋을것 같습니다.
윈도우즈 api책을 보면 잘나와요..
글구 이건 cbuilder의 이미지를 사용해서 함해보죠..
검증은 안해보고 지금 생각나는데로 쓰니까
참고해서 보셔요..
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 먼저 Image를 폼에 붙이고 object Inspector에서
// Picture Property에서 해당 비트맵을 로드해놓으시고..
unsigned char Al_array[255] = {0};
unsigned char *color;
int w, h;
w = Image1->Picture->Bitmap->Width;
h = Image1->Picture->Bitmap->Height;
// 8bit 비트맵이라고 가정...
// 16bit나 24bit는 알아서 구현해보셔요..
if (Image1->Picture->Bitmap->PixelFormat == pf8bit) {
for (int y = 0; y < h; y++) {
color = (unsigned char *)Image1->Picture->Bitmap->ScanLine[y];
for (int x= 0; x < w; x++) {
Al_array[color[x]]++;
}
}
}
}
제가 질문의 핵심을 또 잃어버린걸까요.. 이것저것 주저리
적었는데 돔이 됬으면 좋겠군요..
그럼 즐거운 하루되십시요..
ghost 님이 쓰신 글 :
: bmp파일을 읽어서 bmp파일에 그려져 있는 색깔을 나타내는 것입니다.
: 색깔은 RGB로 흰색은 0 검은색 255이구요
: 이것을 읽어드려서 0~255이 몇번 나왔나?를 구하는 것입니다
: 나름대로 짜 보았는데..
: 잘 되지 않는군요..
: 실행 시키면 byte보다 큰 값이 나오는 군요..
:
:
:
:
: #define size 1
: #define n 1
:
: FILE *fptr;
: int Al_array[256];
:
:
: void main()
: {
: int i = 0;
: int data,read;
: char list[4];
: char temp[2];
: //int n;
:
: // fopen으로 bmp파일 읽습니다. 이 파일의 크기는 576KB이구요
: if((fptr = fopen('C:\\project\\trangle.bmp','r')) != NULL)
: {
: printf('start\n');
:
: //fread함수로 1byte씩 읽습니다.
: while(( read = fread(list, size,n, fptr)) != NULL)
: {
: if( list[i] != '\0')
: {
: //data = list[0];
: temp[i] = list[i];
: data = atoi(temp);
: if( data >= 0 && data <= 255)
: {
: // 빈도수 증가
: ++Al_array[data];
:
: }
: }
: }
:
: }
:
: else
: {
: printf('error');
: }
:
: // 빈도수 나타내기
: for( i = 0; i < 256 ; i++)
: printf('%2d : %10d\n', i, Al_array[i]);
: fclose(fptr);
:
: }
:
:
:
|