Q&A

  • <질문>델파이 그래픽에서, 필터효과를 줄려고합니다.
그림을 창에 불러와서, 그 다음에

그림 전체의 명도를 조절하거나, 채도를 조절하는 등의 필터효과를 주려고 합니다.

아시는 분 , 좀 알려 주세요.



부탁드립니다.

4  COMMENTS
  • Profile
    나그네야 2000.11.30 09:59
    FastBmp를 사용하지 않는 방법도 있습니다.

    TBitmap에는 ScanLine이라는 row단위로 픽셀정보를

    read/write할수 있는 함수가 있죠.

    FastBmp보다 빠른지 느린지 테스트 안해
  • Profile
    조규춘 2000.11.24 01:46
    김성준 wrote:

    > 그림을 창에 불러와서, 그 다음에

    > 그림 전체의 명도를 조절하거나, 채도를 조절하는 등의 필터효과를 주려고 합니다.

    > 아시는 분 , 좀 알려 주세요.

    >

    > 부탁드립니다.



    밑에 이경문 님 처럼 해두 되구...



    다른 방법두 있습니다. 물론 더 멋진 효과를 줄려면은..



    상용화 되어 있는 컴포를 쓰셔두 되지요~ (예.. imageLib 120만원짜리...)



    그렇지만 보통 TImage 컴포로도 가능하다면



    그걸 이용해야 돈도 절약.. 실력향상이 되것지요~~



    우선 명도 같은것을 바꿀려면.. 일종의 색이 바뀐다고 봐도 된답니다.



    그리하여 기본적으로 설명을 하자면..





    1) RGB



    19세기 후반에 물리학자 맥스웰은 컬러 영상은 적색(Red), 녹색(Green), 청색(Blue) 3개의 기본 컬러를 이용하여 적당히 섞으면 모든 컬러를 만들 수 있다는 것을 알아냈다.

    지금은 컴퓨터에서 이미지를 표시하는 기본적인 공간이 되었다. 각각의 값은 0-255의 256단계로 나누어져 있다.(물론 이미지의 비트수에 따라 단계가 틀리다.)



    2) CMY



    청록색(Cyan), 자홍색(magenta), 노랑색(Yellow)으로 구성된 컬러 공간이다. 이것은 RGB 컬러 공간과 반대의 공간이다.



    3) CMYK란?



    CMY에 검정색이 포함된 컬러 공간이다. 이것은 다른 컬러 공간들 보다 검정색이 좋기 때문에 프린팅 처리를 할 때 사용된다.



    4) HIS란?



    색상, 채도, 명도로 나타내는 컬러 공간이다. 그레이스케일 처리시 많이 사용된다.





    --------------------------------------------------------------------------------







    그래서 이것들을 변환하면 아래의 소스처럼 해두되구..



    procedure RGBTOCMYK(R : byte; G : byte; B : byte;

    var C : byte; var M : byte;

    var Y : byte; var K : byte);

    begin

    C := 255 - R;

    M := 255 - G;

    Y := 255 - B;

    if C < M then K := C

    else K := M;

    if Y < K then K := Y;

    if k > 0 then

    begin

    c := c - k;

    m := m - k;

    y := y - k;

    end;

    end;



    procedure CMYKTORGB(C : byte; M: byte; Y : byte; K : byte;

    var R : byte; var G : byte; var B : byte);

    begin

    if (Integer(C) + Integer(K)) < 255 then R := 255 - (C + K)

    else R := 0;

    if (Integer(M) + Integer(K)) < 255 then G := 255 - (M + K)

    else G := 0;

    if (Integer(Y) + Integer(K)) < 255 then B := 255 - (Y + K)

    else B := 0;

    end;



    procedure ColorCorrectCMYK(var C : byte; var M : byte;

    var Y : byte; var K : byte);

    var

    MinColor : byte;

    begin

    if C < M then MinColor := C

    else MinColor := M;

    if Y < MinColor then MinColor := Y;

    if MinColor + K > 255 then MinColor := 255 - K;



    C := C - MinColor;

    M := M - MinColor;

    Y := Y - MinColor;

    K := K + MinColor;

    end;



    위의 소스를 이용한다면 명도나 채도 바꾸는 것은 아주 쉬운일일꺼 같군요..



    그러면 수고 하셔요~



  • Profile
    이경문 2000.11.23 21:37
    FastImage 컴포넌트(FastBmp 유닛 포함)를 사용해 보세요.

    토리 사이트(http://www.torry.ru)에 가 보면 있습니다.

    김성준 wrote:

    > 그림을 창에 불러와서, 그 다음에

    > 그림 전체의 명도를 조절하거나, 채도를 조절하는 등의 필터효과를 주려고 합니다.

    > 아시는 분 , 좀 알려 주세요.

    >

    > 부탁드립니다.

  • Profile
    김성준 2000.11.24 17:54
    답변, 고맙습니다.

    아직 구현은 안했지만, 한번 가르쳐 주신대로 해 보겠습니다.

    그리고 안되면 또 물어볼께요 ^^.