Q&A

  • 이미지에 Blur 효과 주는 방법...
이미지에 Blur 효과를 주려구 합니다.
일단 코딩은 아래와 같이 했구여
SRCIMG 는 이미지 컴포넌트구 BlurConst 는 효과를 줄 픽셀에 관계된 것입니다

아래 대로 코딩했구여.. 근데 이미지가 전부 까맣게 나오네요.ㅠㅠ

P_Blur[0,j] := RGB(RS,GS,BS); 이부분을 확인해보면..

r, g, b 값이 제대로 들어간거 같은데요.ㅠㅠ

어디가 잘못된 건지... 조언 부탁드립니당..


     SrcImg.Picture.Bitmap.PixelFormat := pf32bit;
     for i:=0 to SRCIMG.Height - 2 - BlurConst do begin
          for j := 0 to BlurConst do begin
               P_Blur[j] := SrcImg.Picture.Bitmap.ScanLine[j + i];
          end;
          for j := 0 to SrcImg.Width - 1 - BlurConst do begin
               RS:=0;
               GS:=0;
               BS:=0;
               for k:=i to i + BlurConst do begin
                    for k1 := j to j + BlurConst do begin
                         rs := rs + GetRValue(P_Blur[k-i][k1-j]);
                         gs := gs + GetGValue(P_Blur[k-i][k1-j]);
                         bs := bs + GetBValue(P_Blur[k-i][k1-j]);
                    end;
               end;
               RS:=RS DIV ((BLURCONST+1)*(BLURCONST+1));
               GS:=GS DIV ((BLURCONST+1)*(BLURCONST+1));
               BS:=BS DIV ((BLURCONST+1)*(BLURCONST+1));
               P_Blur[0,j] := RGB(RS,GS,BS);
          end;
     end;
6  COMMENTS
  • Profile
    박상윤 2002.10.09 05:27
    32bit를 사용하시는 것은 낭비입니다.
    뒤의 8바이트는 아직사용하지않기때문에
    메모리 낭비가 됩니다.


         SrcImg.Picture.Bitmap.PixelFormat := pf24bit;

         for i:=0 to SRCIMG.Height - 2 - BlurConst do begin
              for j := 0 to BlurConst do begin
                 
              // 0 <j + i <= SRCIMG.Height -1

                  P_Blur[j] := SrcImg.Picture.Bitmap.ScanLine[j + i];
              end;

              for j := 0 to SrcImg.Width - 1 - BlurConst do begin
                   RS:=0;
                   GS:=0;
                   BS:=0;
                   for k:=i to i + BlurConst do begin
                        for k1 := j to j + BlurConst do begin
                             rs := rs + GetRValue(P_Blur[k-i][k1-j]);
                             gs := gs + GetGValue(P_Blur[k-i][k1-j]);
                             bs := bs + GetBValue(P_Blur[k-i][k1-j]);
                        end;
                   end;

                   // Sum/Count =Avr 평균 계산 (0<=   <=255)
                   RS:=RS DIV ((BLURCONST+1);
                   GS:=GS DIV ((BLURCONST+1);
                   BS:=BS DIV ((BLURCONST+1);


                  //P_Blur가 Tcolor 배열인가여???
                  아니면 포인터 등을 통해서 처리 해야 함..
                  P_Blur[0,j] := RGB(RS,GS,BS);
              end;
         end;


    음 대충 봤는대여...
    여기저기 고쳐 할부분이 많아서리..
    될수 있으면 함수 단위로 올려 주시면...
    보고 고쳐드리기가 쉽거든요..
    자세한 것을 원하시면....
    함수를 전채 올려 주세여..

    그럼 즐프 하세여..

  • Profile
    김종화 2002.10.09 20:47
    나름대로 버그 잡았다구 생각하구 나온 결과가 아래와 같네요..
    한번 테스트 해 보시구.. 잘 못된점 있으면 지적해 주세요..^^;;
    아직 맞게 구현했는지 확신이 안서네요..ㅠㅠ
    그럼 앞으로도 많은 조언 부탁드립니당..

    참.. 24비트로 하면. 이미지에 줄이 쫙쫙 그려집니당.ㅠㅠ
    원본 이미지가 32비트로 되어 있어서 그런 건지도 몰겠네요...

    procedure Make_Blur(SrcImg : TImage; BlurConst : integer);
    var  i,j,k,h, s : integer;
         iR, iG, iB : integer;
         P_Blur : array[0..10] of PIntegerArray;  // BlurConst : 1 ~ 5
    begin
         SrcImg.Picture.Bitmap.PixelFormat := pf32bit;
         for i := BlurConst to SrcImg.Height - 1 - BlurConst do begin
              for s := 0 to BlurConst * 2 do begin
                   P_Blur[s] := SrcImg.Picture.Bitmap.ScanLine[s + i - BlurConst];
              end;
              for j := 0 to SrcImg.Width - 1 - BlurConst*2 do begin
                   iR := 0;
                   iG := 0;
                   iB := 0;
                   for k:=0 to BlurConst * 2 do begin
                        for h := 0 to BlurConst * 2 do begin
                             iR := iR + GetRValue(P_Blur[k][h+j]);
                             iG := iG + GetGValue(P_Blur[k][h+j]);
                             iB := iB + GetBValue(P_Blur[k][h+j]);
                        end;
                   end;
                   iR := iR div ((BlurConst*2+1)*(BlurConst*2+1));
                   iG := iG div ((BlurConst*2+1)*(BlurConst*2+1));
                   iB := iB div ((BlurConst*2+1)*(BlurConst*2+1));
                   P_Blur[BlurConst][BlurConst + j] := RGB(iR,iG,iB);
              end;
         end;
    end;

  • Profile
    박상윤 2002.10.09 22:17
    변환하시면 돼구여..아마도 처리하는
    루틴이 32비트 체게로 되어있어서...
    그런것 같네여..

    지금 사용하시는 방법은
    Mean Filter 방식입니다.평균을 사용하는 방법이지요..
    이것 말고도 Median Filter ,Low Pass등 여러가지
    방법이 있습니다.
    가장 많이 사용하는 방법은 미디언 필터입니다.
    DSP 쪽에서는 fir 필터를 씁니다.
    ^^;;

    BlurConst 는  마스크 크기를 이야기하는것 같은데..
    적어도 3x3이상은 되어야 효과를 확실히 볼수 있을 것
    같은데 .GetRValue등의 api를 사용하시느것은
    이미지 프로 세싱 하실때..속도저하를 가져 옵니다.
    배열을 사용하시던지.. 아니면 포인터를 사용하여 작업을
    하셔야 합니다.
    P_Blur을 TColor를 사용하기위해서  Integer를 선언 하셨는데.
    마찬가지로 32비트니까.손해를 보시는 것입니다.


    다음은 24비를 사용 이진화 하는 간단 예제 입니다.
    참고 하시기를

    procedure Binary( Src :TBitmap)
    var
    SRcRow: pRGBTriple ;
    i,j:Integer;
    begin


        //이진화
        for j:=0 to Src .Height-1 do
        begin
           SRcRow:=Src.Scanline[j];
            for i:=0 to Src.width-1 do
            begin

                if SrcRow.rgbtBlue<128 then
                begin
                    SrcRow.rgbtBlue:=0;
                    SrcRow.rgbtGreen:=0;
                    SrcRow.rgbtRed:=0;
                 end
                else
                begin
                    SrcRow.rgbtBlue:=255;
                    SrcRow.rgbtGreen:=255;
                    SrcRow.rgbtRed:=255;
                end;
            
             //포인터 증가
             inc(SrcRow);
            end;
        end;

       Src.refresh;
    end;

    그럼 ..즐프하세여

  • Profile
    김종화 2002.10.11 01:17
    SRcRow: pRGBTriple ;
    여기서 pRGBTriple 이게 어떤 형인가여??
    도움말에 안나오는데요...^^;;

    정말 모르는게 너무 많네요.ㅠㅠ
    많은 가르침 부탁드립니당..

  • Profile
    박상윤 2002.10.11 21:39
    도움말은 MSDN을 참고하시구

    8비트의 경우
    pBYTE=^BYTE

    24비트의 경우
    pRGBTRIPLE=RGBTRIPLE;

    RGBTRIPLE구조체는 윈도우에서 기본적으로 지원하는
    구조체입니다.
    내부에 8비트씩  r,g,b 3개가 들어갑니다..
    사용하기 편하지여.
    아니면 포인터로 받아서 이동 처리 해야합니다.
    ^^ GetRValue 함수는 안씁니다.
    함 써보세여..
    그럼


    RGBTRIPLE
    The RGBTRIPLE structure describes a color consisting of relative intensities of red, green, and blue. The bmciColors member of the BITMAPCOREINFO structure consists of an array of RGBTRIPLE structures.

    typedef struct tagRGBTRIPLE {
      BYTE rgbtBlue;
      BYTE rgbtGreen;
      BYTE rgbtRed;
    } RGBTRIPLE;

    Members
    rgbtBlue
    Specifies the intensity of blue in the color.
    rgbtGreen
    Specifies the intensity of green in the color.
    rgbtRed
    Specifies the intensity of red in the color.

    Requirements
      Windows NT/2000 or later: Requires Windows NT 3.1 or later.
      Windows 95/98/Me: Requires Windows 95 or later.
      Header: Declared in Wingdi.h; include Windows.h.


  • Profile
    박상윤 2002.10.10 05:03
    죄송...
    일하다가 바뻐서 ..
    다 수정 못한것을 올려서..
    ^^;

    위에 예제 다시수정 했습니다..
    참고 하시기를
    • 박철우
    • 2002.10.10 00:50
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 문성운
    • 2002.10.09 23:33
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김경록
      2002.10.10 03:55
      저의 경우를 들어서 말씀드리고, 먼저 어떻게 공부하느냐를 설명드리겠습니다.. 물론, 제 경험으로 비추...
    • 문성운
      2002.10.10 07:52
      경험에 가득찬 선배님의 말씀을 들으니 힘이 생깁니다. 지금 구루구루로 ms-sql2000 다운받고있습니다..-_...
    • KDDG_ZZOM
      2002.10.10 00:57
      꼭 데이타베이스를 배워야 되는건 아니죠... 컴터쪽이 너무나 많이 세분화? 되어있다고 예기해야되나??? ...
    • 문성운
      2002.10.10 07:48
      답변 감사합니다..^^;; 많은 도움이 되었습니다. 앞으로도 자주 부탁드릴께요^^;
    • 정경철
      2002.10.12 00:53
      그냥 쿼리문으로 지우십시오... delete from table1;
    • 김경록
      2002.10.10 04:00
      Pradox는 Union이 안되는것으로 알고 있습니다. MySQL도 4.0 이전 버젼에서 Union이 안되기 때문에, 임...
    • ▲┫┃■┃콜론
      2002.10.10 04:57
      조언 감사해요~ 임시테이블을 생성 해야 겠네요~ 담부턴 파라독스 사용 안할려구 생각 중입니다. 평안하...
    • 노경숙
    • 2002.10.09 23:03
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 또치
      2002.10.09 23:13
      쿼리를 날릴때 이렇게 하면 어떨까요. 오라클이라면, 그 컬럼명이 aaa라고 한다면, select deco...
    • KYH
      2002.10.10 01:36
      혹시 키필드가 여러개란 말씀이신가요? ^^;; 제가 제대로 이해했다면 setkey 를 쓰시면 될겁니다. ex...
    • 임형호
      2002.10.09 22:43
      예전에 제가 썼던 내용인데..참고하세요. 그리고 Table에서 검색은 몇가지가 있습니다. 일반적으로 Fi...
    • 이추형
      2002.10.09 21:58
      select current date from syscat.dbauth
    • 최연식
    • 2002.10.09 20:58
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 송강식
      2002.10.10 01:04
      뭐 정확히 요구하시는게 표를 그린다음에 각 표의 셀에 데이타를 넣으시겠다는 것인지는 잘모르겠지만요....
    • 이추형
      2002.10.09 20:56
      가능합니다. 하지만 제가 아래한글과 컨택해본 결과 자신들이 사용하는 특정라이브러리가 필요하며, 판...
    • 이추형
      2002.10.09 20:08
      procedure TfrmTest.Button1Click(Sender: TObject); begin   if GridXLS1.FileName <> ...
    • 정성훈
      2002.10.09 20:44
      이추형님께서 쓰신 이글은 GridXLS 라는 외부컴퍼넌트가 있어야 가능한거 아닙니까????
    • 송재진
    • 2002.10.09 19:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.10.09 19:54
      첨부문서 참조
    • 짱아
    • 2002.10.09 19:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2002.10.09 19:43
      gubun : string; 의 변수가 글로벌이 아니기에 다른 Form에서 참조 몬합니다. 또한 Form2에서 Form1의 변...
    • 짱아
      2002.10.09 20:18
      답변 감사해염.. 근데... form2의 uses절에는 참조한다는 문귀를 넣었구여... 글로벌변수로 사용하려면&n...
    • 박희경
    • 2002.10.09 08:18
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 델사랑
    • 2002.10.09 07:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 2002.10.09 08:47
      Label1.Font.Style := [fsItalic];
    • 김상수
    • 2002.10.09 05:04
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 신승철
      2002.10.12 01:25
      detail band와 pagefooter... 참으로 난해할것입니다. 저도 아직 풀지 못한부분이 있어서요.. pagefooter...
    • 김상수
      2002.10.12 19:29
      답변 감사드립니다.. 아래 제가 쓴 부분은 해결했습니다..^^v 근데 님의 말씀대로 라인이 걸리...
    • 김종화
    • 2002.10.09 04:34
    • 6 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2002.10.09 05:27
      32bit를 사용하시는 것은 낭비입니다. 뒤의 8바이트는 아직사용하지않기때문에 메모리 낭비가 됩니다. ...
    • 김종화
      2002.10.09 20:47
      나름대로 버그 잡았다구 생각하구 나온 결과가 아래와 같네요.. 한번 테스트 해 보시구.. 잘 못된점 있으...
    • 박상윤
      2002.10.09 22:17
      변환하시면 돼구여..아마도 처리하는 루틴이 32비트 체게로 되어있어서... 그런것 같네여.. 지금 사...
    • 김종화
      2002.10.11 01:17
      SRcRow: pRGBTriple ; 여기서 pRGBTriple 이게 어떤 형인가여?? 도움말에 안나오는데요...^^;; 정...
    • 박상윤
      2002.10.11 21:39
      도움말은 MSDN을 참고하시구 8비트의 경우 pBYTE=^BYTE 24비트의 경우 pRGBTRIPLE=RGBTRIPLE; ...
    • 박상윤
      2002.10.10 05:03
      죄송... 일하다가 바뻐서 .. 다 수정 못한것을 올려서.. ^^; 위에 예제 다시수정 했습니다.. 참고 ...
    • 2002.10.09 04:17
      정렬이라는 걸로 검색해 보시면 많은 예제를 보실 수 있을겁니다. 오른쪽, 왼쪽, 가운데, 정렬등 모두 가...
    • 강재규
      2002.10.10 03:03
      초보입니다... CalcField를 사용해보세요... 1. TTable을 더블클릭을 하세요. 2. 창이 나타나면 ...
    • 홍성락
      2002.10.09 04:49
      DBGrid의 DrawColumnCell이벤트에서 Field을 TDateTimeField형변환하여 DisplayFormat문자를 설정하시면 ...