Q&A

  • memo1 에 이미지의 RGB값 ADD
밑의 코딩을 보면 image1 의 X Y 좌표 0에서부터 그 크기 까지 루프를 돌면서
memo1에 RGB값을 ADD시키는 코딩인데
memo1찍히는것은 R[FF] G[FF] B[FF] <--이값만 여러개찍히는데 어떤부분이 틀린것인지 통~~알수가 없어여 알고 계신는분은 답변부탁드립니다

procedure TForm1.Button1Click(Sender: TObject);
var
  x, y : integer;
  tmp_Color : Integer;
begin
  tmp_Color := Image1.Canvas.Pixels[x,y];
  for y:=0 to image1.height -1 do
  begin
    for x := 0 to image1.Width -1 do
    begin
       memo1.Lines.add(format('R[%2X] G[%2X] B[%2x]',
                        [tmp_Color and $FF,
                        (tmp_Color and $FF00)shr 8,
                        (tmp_Color and $FF0000)shr 16]));
    end;
  end;
end;
2  COMMENTS
  • Profile
    정병선 2003.08.28 09:46
    type
      TRGBColor = record
        B, G, R : byte;
      end;

    TRGBColorArray = array[0..0] of TRGBColor;
    PRGBArray = ^TRGBColorArray;

    procedure ReadBitmap(Bitmap: TBitmap; Memo: TMemo);
    var
      x, y: integer;
      p: PRGBArray;
    begin
      Memo.Clear;
      with Bitmap do
      begin
        if Empty or (Height = 0) or (Width = 0) then
          Exit;
        for y:=0 to Height-1 do
        begin
          p := ScanLine[y];
          for x:=0 to Width -1 do
            with p[x] do
              Memo1.Add(Format('%.2x %.2x %.2x', [R, G, B]);
        end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ReadBitmap(Image1.Picture.Bitmap, Memo1);
    end;

    이렇게 사용해 보시는 것도...

  • Profile
    KDDG_Check 2003.08.28 06:28
    안녕하세요. 여유로움입니다.

    잠시 실수를 하신거 같네요.
    코딩을 하다보면 가끔 그럴때가 있죠.
    간단한 실수인데두 내생각에는 옳은거 같은 ....커커커

    소스에 보시면
    tmp_Color := Image1.Canvas.Pixels[x,y];
    이부분이 for 루프 안으로 들어 가야 하는데
    밖에 나와 있기 때문에 0,0 위치의 컬러값만이 표시 되는겁니다.
    그니까
    tmp_Color := Image1.Canvas.Pixels[x,y];
    이 부분이 두번째 for 안에 들어 가 있어야 겠지요.
    아래와 같이 옮겨 주시면 되겠네요.

    procedure TForm1.Button1Click(Sender: TObject);
    var
      x, y : integer;
      tmp_Color : Integer;
    begin
      //tmp_Color := Image1.Canvas.Pixels[x,y];  // 제거
      for y:=0 to image1.height -1 do
      begin
        for x := 0 to image1.Width -1 do
        begin
           tmp_Color := Image1.Canvas.Pixels[x,y]; // 여기로 이동
           memo1.Lines.add(format('R[%2X] G[%2X] B[%2x]',
                            [tmp_Color and $FF,
                            (tmp_Color and $FF00)shr 8,
                            (tmp_Color and $FF0000)shr 16]));
        end;
      end;
    end;

    그럼 도움이 되셨기를....