문제

a에서 이미지를 어떻게 타일합니까? TImage 델파이에서?

내가 필요한 이유: 런타임에 더 많은 타이밍을 만드는 대신, 타이메지의 높이와 너비에 도달 할 때까지 '적합하다'는 것을 알고 이미지를 만들고 이미지를 저장할 수 있습니다.

이를 위해 아이디어를 제안하십시오.

고맙습니다!

편집 : 나는 이미지를 밟는 것을 요구하는 것이 아니라 이미지를 반복하여 캔버스를 채우는 것을 요구합니다.

도움이 되었습니까?

해결책

다음은 내가 사용한 기능이며, 기존 타임 매지 구성 요소를 취하고 대상 캔버스 위로 타일링하는 기능입니다.

procedure TileImage(const Source:tImage;
    Target: TCanvas;
    TargetHeight,TargetWidth:integer);
// Tiles the source image over the given target canvas
var
  X, Y: Integer;
  dX, dY: Integer;
begin
  dX := Source.Width;
  dY := Source.Height;
  Y := 0;
  while Y < TargetHeight do
    begin
      X := 0;
      while X < TargetWidth do
        begin
          Target.Draw(X, Y, Source.Picture.graphic);
          Inc(X, dX);
        end;
      Inc(Y, dY);
    end;
end;

tlabel은 캔버스를 노출시키기 때문에 다음과 같은 트릭을 수행 할 수 있습니다.

TileImage(Image1,Label1.Canvas,Label1.Height,Label1.Width);

다른 팁

이미지가 비트 맵이라고 가정하고 시계에로드되었다고 가정하면 다음을 사용할 수 있습니다.

procedure TmyForm.Button1Click(Sender: TObject);
    var mybmp:TBitmap;
begin
    mybmp:= TBitmap.Create();
    try
        mybmp.Assign(Image1.Picture.Bitmap);

        Image1.Picture.Bitmap.SetSize(Image1.Width,Image1.Height);
        Image1.Canvas.Brush.Bitmap := mybmp;
        Image1.Canvas.FillRect(Image1.BoundsRect);

        mybmp.FreeImage;
    finally
        FreeandNil(mybmp)
    end;
end;

몇 가지 메모 :

타이틀 후 이미지를 저장하면 원본이 아닌 제목의 버전을 저장합니다.

image1.canvas 및 image1.picture.bitmap.canvas는 동일하기 때문에 캔버스에 그림을 그리기 전에 비트 맵을 크기를 조정해야합니다.

먼저 다른 비트 맵 객체에 할당하지 않고 브러시에 비트 맵을 브러시에 할당하려면 image1.canvas.brush.bitmap : = image1.picture.bitmap "저장소가 충분하지 않음"은 예외를 얻습니다.

당신은 설정할 수 있습니다 canvas.brush.bitmap := 타일의 이미지에. 그 다음에 canvas.fillrect(canvas.cliprect) 선택한 타일 이미지로 전체 캔버스를 타일합니다. 나는 오랫동안 그것을하지 않았고 이것이 실제로 델파이에서 어떻게 이루어 졌는지 확인할 수 없지만 이것이 당신이 추구하는 것이라고 확신합니다.

Delphi 설치에는 'Bitmap'이라는 데모가 함께 제공됩니다 (Help Dir.에서 프로젝트를 찾을 수 있음).

다음 방법을 사용하여 타일 이미지를 그립니다.

procedure TBmpForm.FormPaint(Sender: TObject);
var
  x, y: Integer;
begin
  y := 0;
  while y < Height do
  begin
    x := 0;
    while x < Width do
    begin
      // Bitmap is a TBitmap.
      //  form's OnCreate looks like this:
      //    Bitmap := TBitmap.Create;
      //    Bitmap.LoadFromFile('bor6.bmp');
      //  or you can use Canvas.Draw(x, y, Image1.Picture.Bitmap),
      //  instead of Canvas.Draw(x, y, Bitmap);
      //
      Canvas.Draw(x, y, Bitmap); //Bitmap is a TBitmap. 
      x := x + Bitmap.Width; // Image1.Picture.Bitmap.Width;
    end;
    y := y + Bitmap.Height; // Image1.Picture.Bitmap.Height;
  end;
end;

도움이되기를 바랍니다!

"피팅"으로 "타일링"을 의미합니까? 내가 아는 한, Timage는 이것을 상자에서 지원하지 않습니다. 시간이 반복되는 패턴으로 타임 지의 캔버스에 그림을 수동으로 그려야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top