Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.12;
Скачать: CL | DM;

Вниз

Как залить TImage TBitmap-ом   Найти похожие ветки 

 
HRustBB   (2010-06-07 01:05) [0]

есть форма, на ней один 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.


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


 
antonn ©   (2010-06-07 01:35) [1]

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


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

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


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

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.


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

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


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


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

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


 
antonn ©   (2010-06-11 17:05) [6]


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

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


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


> antonn ©


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


 
antonn ©   (2010-06-11 17:46) [8]

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


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


> han_malign   (11.06.10 16:50) [5]


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


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

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


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


и всёё


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


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

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2010.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1274947026
Dzmitry
2010-05-27 11:57
2010.09.12
A call to an OS function failed


4-1240171103
9899100
2009-04-19 23:58
2010.09.12
Найти окно по имени и классу из сервиса


2-1276935710
caesar_88
2010-06-19 12:21
2010.09.12
Windows Служба USB устройства


15-1275146068
stas
2010-05-29 19:14
2010.09.12
Win 7 получить доступ к файлам реестра


15-1276520714
AKE
2010-06-14 17:05
2010.09.12
Что такое atom?