Q&A

  • 칼라 이미지를 그레이로 변환하는 방법좀...
안녕하십니까...

델파이로 영상처리를 구현 해 볼라고 하는데요...

칼라 이미지를 그레이로 변환 하는 방법좀 알려 주세요...

이미지 처리쪽은 첨이라 막막 하네요..

감사합니다.

그럼 추운날씨에 감기 조심하세요.

3  COMMENTS
  • Profile
    조규춘 2000.10.18 06:42
    이광형 wrote:

    > 안녕하십니까...

    > 델파이로 영상처리를 구현 해 볼라고 하는데요...

    > 칼라 이미지를 그레이로 변환 하는 방법좀 알려 주세요...

    > 이미지 처리쪽은 첨이라 막막 하네요..

    > 감사합니다.

    > 그럼 추운날씨에 감기 조심하세요.





    안녕하십니까??

    델세상(http://www.freechal.com/delphiworld)의 조규춘입니다.



    오랫만에 QNA에 온거 같군요.. ^^ 바쁜척하느라구요.. ^^



    우선 소스부터 보여드리자면...

    테스트 해봤더니...



    두가지 방법으로 해봤습니다.

    한가지 방법은...

    Image1.Picture.Bitmap.Monochrome := True;

    이소스 처럼..

    Monochrome 를 해주면 되긴 하는데..

    문제는 2bit gray가 된다는 점입니다.

    그러니깐 검정아니면 흰색.. 쩝.. 이건그렇겠지요?



    또하나는

    픽셀을 일일이 바꾸어 주는 방식입니다.

    그런데..

    296*180 사이즈인데.. 한 11초 걸리더군요..^^





    그럼 행복하셔요~



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, jpeg, ExtCtrls, TFlatGaugeUnit, ComCtrls;



    type

    TForm1 = class(TForm)

    Image1: TImage;

    Button1: TButton;

    ProgressBar1: TProgressBar;

    Button2: TButton;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation





    // Color를 Gray로 바꾸기..

    Function RGBToGray(RGBColor:TColor):TColor;

    Var

    Gray : Byte;

    Begin

    Gray:= Round((0.30*GetRValue(RGBColor)) +

    (0.59*GetGValue(RGBColor)) +

    (0.11*GetBValue(RGBColor )));

    Result:= RGB(Gray, Gray, Gray);

    End;





    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    Var

    LoopX, LoopY : Integer;

    ValueGauge : Integer;

    begin

    // 진행도 표시를 위해서....

    // 296*180 사이즈인데.. 한 11초 걸린다.

    ProgressBar1.Max := Image1.Width * Image1.Height;

    ValueGauge := 0;



    // 그림을 픽셀을 하나하나씩 가져온다.

    // 그리고 바꾸어 준당..

    With Image1.Picture.Bitmap.Canvas do

    For LoopY:= 0 to Image1.Height do

    For LoopX:= 0 to Image1.Width do

    begin

    Pixels[LoopX, LoopY]:= RGBToGray(Pixels[LoopX, LoopY]);

    inc(ValueGauge);

    ProgressBar1.Position := Valuegauge; // 게이지에 표시...

    end;

    end;



    procedure TForm1.Button2Click(Sender: TObject);

    begin

    Image1.Picture.Bitmap.Monochrome := True;

    end;



    end.



  • Profile
    이경문 2000.10.26 02:31
    Pixels 프로퍼티가 상당히 느린건 많은 분이 아실가여에요.

    DDB, DIB변환을 해 주면 되는데 TFastBmp라는 클래스가 있습니다.

    그것을 사용해 보시면 속도가 엄청 빠를 겁니다.

    그럼...

  • Profile
    이한 2001.04.04 20:38
    이경문 wrote:

    > Pixels 프로퍼티가 상당히 느린건 많은 분이 아실가여에요.

    > DDB, DIB변환을 해 주면 되는데 TFastBmp라는 클래스가 있습니다.

    > 그것을 사용해 보시면 속도가 엄청 빠를 겁니다.

    > 그럼...



    안녕하세요.

    TFastBmp라는 클래스는 델파이5에 없던거 같던데요....

    공부할수 있는 site나 간단한 소스라도 있으면 좀

    얻을수 있을까해서요....

    이렇게 무작정 부탁드려서 죄송합니다....ㅜㅜ#

    너무 느려서....ㅡ