Timage1 и Timage2 внутри Timage3 - PullRequest
       0

Timage1 и Timage2 внутри Timage3

0 голосов
/ 02 июля 2010

привет, можно ли вставить Timage1 и Timage2 внутри Timage3.если мой Timage1 равен 100x100, а мой Timage2 - 100x100, то в Timage3 они будут соседствовать внутри 200x100, возможно ли это сделать?

спасибо

1 Ответ

7 голосов
/ 02 июля 2010

По сути, вы спрашиваете, можете ли вы создать растровое изображение bm3, которое состоит из двух заданных растровых изображений, bm1 и bm2, рядом. Это легко, но точная реализация зависит от вашего конкретного контекста. Но в принципе, вы могли бы сделать

bm3 := TBitmap.Create;
bm3.SetSize(200, 100);
BitBlt(bm3.Canvas.Handle, 0, 0, 100, 100, bm1.Canvas.Handle, 0, 0, SRCCOPY);
BitBlt(bm3.Canvas.Handle, 100, 0, 100, 100, bm2.Canvas.Handle, 0, 0, SRCCOPY);

, если bm1 и bm2 равны 100 × 100 кв. Пикс. Объекты TBitmap.

В качестве альтернативы, если вы предпочитаете работать с VCL, а не с Windows GDI, вы можете заменить две строки BitBlt на

bm3.Canvas.Draw(0, 0, bm1);
bm3.Canvas.Draw(100, 0, bm2);

Полный пример:

var
  bm1, bm2, bm3: TBitmap;

procedure TForm1.FormCreate(Sender: TObject);
begin

  // Load bm1 and bm2
  bm1 := TBitmap.Create;
  bm1.LoadFromFile('C:\Users\Andreas Rejbrand\Desktop\red.bmp');
  bm2 := TBitmap.Create;
  bm2.LoadFromFile('C:\Users\Andreas Rejbrand\Desktop\blue.bmp');

  bm3 := TBitmap.Create;
  bm3.SetSize(200, 100);
  bm3.Canvas.Draw(0, 0, bm1);
  bm3.Canvas.Draw(100, 0, bm2);

end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Canvas.Draw(0, 0, bm3);
end;

В случае компонентов TImage

Предположим, что у вас есть три элемента управления TImage в вашей форме, Image1, Image2 и Image3, и что первые два имеют изображения в них. Тогда вы можете сделать

procedure TForm1.FormClick(Sender: TObject);
var
  tmp: TBitmap;
begin

  tmp := TBitmap.Create;
  try
    tmp.SetSize(Image1.Picture.Width + Image2.Picture.Width, max(Image1.Picture.Height, Image2.Picture.Height));
    tmp.Canvas.Draw(0, 0, bm1);
    tmp.Canvas.Draw(Image1.Picture.Width, 0, bm2);
    Image3.Picture.Assign(tmp);
  finally
    tmp.Free;
  end;

end;

, чтобы позволить Image3 отображать изображения Image1 и Image2 рядом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...