Q&A

  • 지도 부탁합니다.
이곳에서 도움많이 받고 있는 초보입니다.
먼저 edit에 어떤 문자를 입력하고
이것을 별도의 창에 일테면shape나 스트링그리드같은거..
흑색으로 일종의 '전광판' 같이 글자를 뿌려줄수 있는 방법이 있을까요
그래서 그글자의 픽셀데이터를 추출하고자 합니다.


가로세로100개의 cell을 만들어놓고
edit에 입력된글자를 칸을흑색으로(다른색도 됨)채우면서 문자처럼 보이게하고
채워진 칸의 픽셀데이터를 추출할수 있는 방법이 궁금합니다.

답변 좀 부탁합니다.
2  COMMENTS
  • Profile
    김성원 2006.09.30 10:44
    타 사이트 DelMadang에 자료가 있었는데. 지금은 없네요 ^^;
    그래서 만들어 보았습니다.

    구현 방법은 간단합니다.
    가로 세로 100Pixel 짜리 canvas에 글자를 적당한 크기로 출력합니다.
    캔바스의 Pixel 하나를 읽어서 흰색이 아니면 Cell에 검정을 흰색이면 아무것도 출력 안하면 됩니다.
    간단하죠...? 즐거운 시간 되십시요.
    << 소스 나갑니다. >>

    unit Unit2;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, ExtCtrls, StdCtrls;

    type
      TForm2 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
          Rect: TRect; State: TGridDrawState);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        Image1 : TImage;
        StringGrid1 : TStringGrid;
        { Public declarations }
      end;

    var
      Form2: TForm2;

    implementation

    {$R *.dfm}

    procedure TForm2.Button1Click(Sender: TObject);
    var
      I: Integer;
      J: Integer;
      R : TRect;
    begin
      With Image1.Canvas do
      Begin
        Font.Assign( Edit1.Font );
      end;

      Image1.Canvas.Brush.Color := clWhite;

      R := Rect(1,1,100,100);
      Image1.Canvas.FillRect( R );
      Windows.DrawText( Image1.Canvas.Handle,
                        PChar(Edit1.Text),
                        Length( Edit1.Text ),
                        R,
                        DT_WORDBREAK or DT_CENTER );

      for I := 0 to Image1.Width do
        for J := 0 to Image1.Height do
        Begin

          if Image1.Canvas.Pixels[ I, J ] <> clWhite then
            StringGrid1.Cells[I,J]:= 'B'
          Else
            StringGrid1.Cells[I,J]:= '';

        end;


    end;

    procedure TForm2.FormCreate(Sender: TObject);
    begin
      Image1 := TImage.Create( Self );
      Image1.Width := 100;
      Image1.Height := 100;
      Image1.Left := 24;
      Image1.Top := 43;
      Image1.Parent := Form2;

      StringGRid1 := TStringGrid.Create( Self );
      StringGrid1.FixedCols := 0;
      StringGrid1.FixedRows := 0;
      StringGrid1.Left := 10;
      StringGrid1.Top := 151;
      StringGrid1.Width := 409;
      StringGrid1.Height := 305;
      StringGrid1.ColCount := 100;
      StringGrid1.RowCount := 100;
      StringGrid1.DefaultColWidth := 3;
      StringGrid1.DefaultRowHeight := 2;
      StringGrid1.DefaultDrawing := False;
      StringGrid1.OnDrawCell := StringGrid1DrawCell;
      StringGrid1.Parent := Form2;


    end;

    procedure TForm2.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    begin
      if TStringGrid( Sender ).Cells[ ACol, ARow ] = 'B' then
        TStringGrid( Sender ).Canvas.Brush.Color := clBlack
      Else
        TStringGrid( Sender ).Canvas.Brush.Color := clWhite;
      TStringGrid( Sender ).Canvas.FillRect( Rect );

    end;

    end.

  • Profile
    델초보 2006.10.01 17:23
    유용한자료 감사합니다...