Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как залить TImage TBitmap-ом


HRustBB ©   (2010-06-07 01:05:00) 

есть форма, на ней один TImage на всю форму, создаем TBitmap, подгоняем его размеры под TImage. При изменении размеров формы, и соответственно TImage, изменяем размеры TBitmap и снова заполняем им TImage, но на форме TBitmap не меняет своих размеров. Вобщем вот код


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Image1: TImage;
   procedure FormCreate(Sender: TObject);
   procedure FormResize(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 bm:TBitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
bm:=TBitmap.Create;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
bm.Width:=Width;
bm.Height:=Height;
bm.Canvas.Brush.Color:=clRed;
Image1.Canvas.Draw(0,0,bm);
end;

end.


как сделать чтобы при изменении размеров формы битмап тоже менял свой размер и полностью покрывал имейдж.


HRustBB   (2010-06-12 14:51:00) [1]


> А ты уверен, что фсёёёё?


жизнь покажет )))


абизяна   (2010-06-12 12:55:00) [2]


> HRustBB   (12.06.10 01:33) [10]
> Не, ну едрена вош:
>
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> bm:=TBitmap.Create;
> Form1.DoubleBuffered:=true;
> end;
>
>
> и всёё

Ну вот утёр всем нос ;-)
А ты уверен, что фсёёёё?


HRustBB   (2010-06-12 01:33:00) [3]

Не, ну едрена вош:


procedure TForm1.FormCreate(Sender: TObject);
begin
bm:=TBitmap.Create;
Form1.DoubleBuffered:=true;
end;


и всёё


HRustBB   (2010-06-11 19:32:00) [4]


> han_malign   (11.06.10 16:50) [5]


а что за invalidat можно подробней


antonn   (2010-06-11 17:46:00) [5]

он и есть. Рисуешь все на нем, а в конце выводишь на канвас (формы или paintbox - не важно) через canvas.copyrect() или BitBlt()


HRustBB   (2010-06-11 17:41:00) [6]


> antonn ©


а че за буферный битмап, в моем примере bm: TBitmap; не сойдет за буфер?


antonn   (2010-06-11 17:05:00) [7]


> возможно ли избавитться от мерцания при перерисовке канваса

- возможно, если рисовать все объекты на буферном Tbitmap, и его выводить на любой канвас по окончании построения "кадра".


han_malign   (2010-06-11 16:50:00) [8]


> возможно ли избавитться от мерцания при перерисовке канваса

- возможно - если выкинуть на хрен TBitmap, TImage и рисовать(например в TPaintBox) -   как положено - в OnPaint. Регенировать кадр Invalidate-ом... Если не хочется в ручную масштабировать, см. SetWorldTransform, SetWindowExtEx/SetViewportExtEx, ScaleWindowExtEx/ScaleViewportExtEx... Лучше - SetWorldTransform, добиться от от Window/Viewport - точного масштабирования я лично ни разу не смог...


HRustBB   (2010-06-11 14:18:00) [9]

а еще вопрос. у меня на битмапе рисуется изображение затем оно заливается на канвас, затем другое изображение и тоже на санвас, так вот возможно ли избавитться от мерцания при перерисовке канваса


pest   (2010-06-07 10:15:00) [10]

Image.Stretch не всегда красиво делает.

unit Unit1;

interface

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

type
TForm1 = class(TForm)
   Image1: TImage;

  procedure FormCreate(Sender: TObject);
  procedure FormResize(Sender: TObject);
private
  { Private declarations }
public
  { Public declarations }
end;

var
 Form1: TForm1;
 bm: TBitmap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 bm := TBitmap.Create;
 Image1.Anchors := [akLeft,akTop,akRight,akBottom];
end;

procedure TForm1.FormResize(Sender: TObject);
var
 r: TRect;
begin
 r := rect(0, 0, Image1.Width, Image1.Height);
 bm.Width := Image1.Width;
 bm.Height := Image1.Height;
 bm.Canvas.Brush.Color := clWhite;
 bm.Canvas.FillRect(r);
 bm.Canvas.Brush.Color := clRed;
 bm.Canvas.Ellipse(r);
 Image1.Picture.Bitmap.Assign(bm);
end;

end.


Германн   (2010-06-07 02:05:00) [11]

Image.Stretch не помогает?


antonn   (2010-06-07 01:35:00) [12]

image1.width - это ширина визуального компонента. Этот компонент содержит внутри себя битмап, у которого свой image1.picture.bitmap.width


Наверх

Титульная страница Поиск, карта сайта Написать письмо