Blog | Tag | Local | Guest | Login | Write |  RSS
bit에 해당되는 글 1건



 비트맵영상에서의 단위 픽셀을 표현하는 방법에 따라 정밀도가 다르다.
 여기서 픽셀을 표현하는 방법은 파일의 종류에 따라 다르게 되는데
 보통 하나의 픽셀을 몇비트로 표현하는가? 에 대한 정보를 가지고 있고 이에 따라 다양한 컬러모드가 존재한다. 
 물론 한 픽셀의 정보를 많은 비트를 사용할 수록 정밀도가 높아지지만,, 그만큼 그림 파일 하나의 메모리는 커지게된다.
 하지만 메모리를 아끼기위해 한 픽셀의 정보를 최소비트만을 이용하자면,, 그만큼 정밀도는 떨어질 것이다. 
 적당한 조절이 필요하다는 말씀!!

 이번포스팅에서는 픽셀과 컬러 모드에대한 몇가지 예를 들어볼 생각이다.

1. 픽셀(Pixcel)

픽셀(Pixel)은 Picture element의 줄임말이다.
 
즉, 옆의 그림을 참고하면 그림을 확대하고 확대 또확대 확대하다보면
더 이상 확대되지않고 모자이크처럼
정사각형의 하나의 색상단위를 볼 수 있는데,,
다음과 같이 더 이상 세분할 수 없느 이미지의 기본 요소가 되는 것을 픽셀이라고 지칭한다.
화소라는 표현을 사용하기도 한다.

이 픽셀들은 정사각형 모양으로 각각
컬러 정보와 위치 정보를 담고
여러 개가 모여서 하나의 이미지를
만들어 내는 것이다.

장점 ; 일반적인 사진, 그림에서 섬세한의 이미지에 적합하다.
단점 ; 각픽셀에 대하 정보를 가지고 있으므로 그림이 커질수록 더 많은 픽셀이 필요하고 그만큼 디스크의 차지공간은 넓어진다.
         또, 그림을 다음과 같이 확대를 계속하다보면 모자이크처럼 큰점으로 나타나 처음의 섬세함을 찾을 수가 없다.


2. 컬러모드


 1) 트루컬러(true) 모드
 -> 단위 픽셀이 24비트를 가진다. 즉, R,G,B 각각 8비트로 3개라 24비트이다. 
     이를 통해서 2의 24승만큼의 컬러를 표현할 수 있게되는데,, 이를 십진수로 표현하면
     대략 16777216(1670만) 컬러가 되므로,, 최고의 컬러수로 영상을 저장, 가장 정밀도가 높은 컬러모드라고 할 수 있다.
     물론, 디스크의 용량이 충분하다면, 최고의 정밀도를 위해서 트루컬러모드를 추천한다.

 2) 인덱스 모드
-> 요즘 디스크의 격이 싸졌다고는 하지만, 디스크의 용량에는 결국 한계가 있다. 
    그래서 영상정보를 줄여서 저장할 필요성을 느끼게 되는데,,, 그런 의미에서 나온 모드가 인덱스 모드이다.
    다음의 모드는 픽셀당 24비트를 8비트나 16비트로 줄여서 저장하기 위한 시도이다.
    사실 세상에는 많은 색의 표현이 있지만 실제로 우리가 구분이 가능한 색은 많지 않기 때문에 
    다음과 같은 방식으로 저장하여도 트루컬러와 크게 차이를 느끼지 못한다.

    그렇다면 어떻게 색상정보를 줄이는가? 하면 
    24bit의 트루컬러의 이미지중에 8비트라면 8비트만큼의 가장 많이 사용하는 색상정보를 컬러테이블에 저장
    16비트라면 16비트 만큼의 가장 많이 사용하는 색상정보를 컬러 테이블에 저장한다.
    (    예를들어 8 bit는  0~255 까지의 수를 표현할 수 있으므로 총 256가지의 컬러
                16비트는 0~65535까지의 수를 표현할 수 있으므로 총 65536가지의 컬러를  표현할 수 있다.    )


 인덱스  R
 255  212 132  22 
 ...  ... ...  ... 
 1  112 150  255 
 0  23 52  69 

(8bit 팔레트 : 가장 많이 사용된 255가지의 색상정보를 인덱스로 가지고 있다.)

 0  195
 122  255  56
 88  46 200 

(9*9의 8bit 팔레트를 사용하는 bitmap 이미지의 구조)
(255는 위의 인덱스를 쫒아가 RGB값이 각각 211,132,22인 값을 지니게 된다.)
(즉, 트루컬러를 사용했으면 각각의 픽셀당 24bit를 쓰지만,, 이와같은 방법을 사용하면 8bit로 디스크의 샤용이 확 준다.)
(16bit 팔레트를 사용한다면 더 좋은 정밀도를 가질 수 있다.)

단색

16색

8bit



1비트는 0과 1 두수를 표현할 수 있으므로 두가지 컬러를 나타낼수 있다는 말입니다.
8비트는 0~255 까지의 수를 표현할 수 있으므로 총 256가지의 컬러를 나타낼수 있고,

24bit

16bit

32bit

 16비트는 0~65535까지의 수를 표현할 수 있으므로 총 65536가지의 컬러를 나타낼수 있고,
24비트는 0~16777215까지의 수를 표현할 수 있으므로 총 16777216(1670만)컬러를 나타낼수 있죠.
32비트는..^^?
윈도우의 디스플레이등록정보를 보시면 해상도를 설정하는 부분이 있습니다.
그부분의 '색 품질'란에 보시면 16비트, 32비트라고 되어있습니다.
여기서 32비트중 24비트(1670만컬러)는 색을 표현하는데 쓰고,
나머지 8비트는 투명도를 표현하는데 사용됩니다.


 참고 )
1. 16bit는 가라로 만들었음;; 화면해상도를 16bit로 한 뒤 캡쳐 ㄷㄷㄷ
2. 32bit는 무엇?? ㄷㄷㄷ
  : 32bit중 24 bit는 트루컬러처럼 RGB를 사용하고 남은 8bit를 투명도를 표현하는데 사용.
3. 어쨋든 캡쳐는 24bit로 하였으므로,,, 16bit캡쳐본은 오히려 메모리낭비;; 32bit는 24bit와 같음 ㄷㄷㄷ


 

다음은 C++에서 제공하는 팔레트를 저장할 수 있는 구조체이다.

 typedef struct tagRGBQUAD
{
           BYTE          rgbBlue;                  // B 성분 (파란색)
           BYTE          rgbGreen;                // G 성분 (녹색)
           BYTE          rgbRed;                   // R 성분 (빨간색)
           BYTE          rgbReserved1;          // 예약된 변수
} RGBQUAD;



 
 3) 흑백 모드
-> 흑백모드는 RGB의 모든 값이 서로 동일할 때 나타난다.
     RGB가 모두 0이되면 흑백이 되고 255가 되면 가장 밝은 백색이 된다.
     이는 8bit의 특별한 팔레트를 가지고 있는 것이다.  즉, 흑백정보에서는 저장된 인덱스의 값이 바로 밝기정보가 된다.

   R
 255 255  255  255 
 ...  ... ...  ... 
 1 1 1 1
 0

(흑백영상의 팔레트)