Вниз
Скачать: CL | DM;

Как програмно изменить размер картинки   Найти похожие ветки 

← →
Vic-z   (2007-01-28 16:44) [0]

Доброе время суток.
Подскажите как можно подогнать размер загруженого из ресурса битмапа
к размеру Image1, что то не пойму как правильно сделать
размер Image1 меняется, а размер загруженого битмапа не хочет :(

procedure TForm1.FormActivate(Sender: TObject);
var
w,h: Integer;
TOP_IM:TBitMap;
begin
w:=StrToInt(Form_razmer.Edit_shirina.Text) div 10;
h:=StrToInt(Form_razmer.Edit_visota.Text) div 10;
TOP_IM:=TBitMap.Create;
TOP_IM.LoadFromResourceName(HInstance,"TOP_IM");
Image1.AutoSize:=true;
Image1.Stretch:=true;
Image1.Picture.Bitmap.Width:=w;
Image1.Picture.Bitmap.Height:=h;

TOP_IM.Canvas.StretchDraw(TOP_IM.Canvas.ClipRect,TOP_IM);
TOP_IM.Width:=w;
Image1.Canvas.Draw(0,0,TOP_IM);
end;


← →
antonn ©   (2007-01-28 17:05) [1]

во первых повесить код на кнопку:) (это имхо, но в activate его вешать - глупость)

TOP_IM:=TBitMap.Create;
try
TOP_IM.LoadFromResourceName(HInstance,"TOP_IM");
TOP_IM.canvas.copyrect( rect(0,0,w,h), TOP_IM.canvas, rect(0,0,TOP_IM.width,TOP_IM.height) );
image1.assign( TOP_IM ); //вот тут не помню, возможно нужно просто сделать следующие строчки, а можеи и не надо
image1.width:=TOP_IM.width;
image1.height:=TOP_IM.height;
finally
TOP_IM.free;
end;


← →
Vic-z   (2007-01-28 17:17) [2]

что то не пашет :(


← →
antonn ©   (2007-01-28 17:23) [3]

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


← →
Olivetti   (2007-01-28 17:26) [4]

Image1.AutoSize := false;
Image1.Stretch := true;
Image1.Picture.Bitmap.LoadFromResourceName(HInstance, "TOP_IM");


← →
Olivetti   (2007-01-28 17:27) [5]

Olivetti   (28.01.07 17:26) [4]

Больше, типа, ничего не надо.


← →
Vic-z   (2007-01-28 17:30) [6]


> Olivetti   (28.01.07 17:26) [4]
>
> Больше, типа, ничего не надо.

если ставлю Image1.AutoSize := false; то размер Image1 не меняется
:::(((
задолбался ужо :( не выходит у меня, поможите плиз


← →
antonn ©   (2007-01-28 17:39) [7]

для моего кода нужно Image1.AutoSize:=false; Image1.Stretch:=false;
ах, да, я зыбал сделать это перед копированием:)
TOP_IM.width:=w;
TOP_IM.height:=h;


← →
antonn ©   (2007-01-28 17:40) [8]

TOP_IM:=TBitMap.Create;
try
TOP_IM.LoadFromResourceName(HInstance,"TOP_IM");
image1.width:=TOP_IM.width;
image1.height:=TOP_IM.height;
TOP_IM.width:=w;
TOP_IM.height:=h;
TOP_IM.canvas.copyrect( rect(0,0,TOP_IM.width,TOP_IM.height), TOP_IM.canvas, rect(0,0,image1.width,image1.height) );
image1.assign( TOP_IM ); //вот тут не помню, возможно нужно просто сделать следующие строчки, а можеи и не надо
image1.width:=TOP_IM.width;
image1.height:=TOP_IM.height;
finally
TOP_IM.free;
end;

:)


← →
Olivetti   (2007-01-28 17:41) [9]

как можно подогнать размер загруженого из ресурса битмапа
к размеру Image1


Так тебе что к чему подгонять: Image1 к битмапу, или битмап к Image1?
Ты это, определись.


← →
Vic-z   (2007-01-28 17:45) [10]


> битмап к Image1

битмап к Image1


← →
Olivetti   (2007-01-28 17:46) [11]

если ставлю Image1.AutoSize := false; то размер Image1 не меняется

Тогда это к чему? Размер Image1 должен меняться? Опиши задачу конкретнее.


← →
Vic-z   (2007-01-28 17:53) [12]


> Опиши задачу конкретнее.

на форме Image1 размером 100х100 , в ресурсе битмат размером 10х10
переменными w,h нужно менять размер Image1 (с этим нет проблемы)
но битмат из ресурса нужно нарисовать на Image1 не 10х10 а размером Image.width x Image.height


← →
Olivetti   (2007-01-28 18:02) [13]

begin
 Image1.Width := StrToInt(Form_razmer.Edit_shirina.Text) div 10;
 Image1.Height := StrToInt(Form_razmer.Edit_visota.Text) div 10;
 Image1.Stretch := true;
 Image1.Picture.Bitmap.LoadFromResourceName(HInstance,"TOP_IM");
end;


← →
Olivetti   (2007-01-28 18:04) [14]

Ты уверен, что этот код должен быть на OnActivate?


← →
Vic-z   (2007-01-28 18:07) [15]


> Ты уверен, что этот код должен быть на OnActivate?
>

ну когда закрывается форма для изменения размеров Image1 , тогда становиться активной главная форма


← →
antonn ©   (2007-01-28 18:12) [16]

сделать форму "для изменения размеров Image1" с модальным вызовом, тогда и картинку можно выводить в той же процедуре, где и вызов формы


← →
Olivetti   (2007-01-28 18:23) [17]

ну когда закрывается форма для изменения размеров Image1 , тогда становиться активной главная форма

Она становится активной не только когда закрывается форма для изменения размеров. Какой смысл перезагружать растр из ресурса каждый раз, когда форма становится активной? Пользователь, понимаешь ли, бывает, переключается на другие приложения, или на другие формы твоего приложения (если имеются).

Воспользуйся советом [16].

Или делай загрузку растра из ресурса только при старте приложения, а размер Image1 меняй когда надо, типа:

procedure TForm1.FormCreate();
begin
 Image1.Stretch := true;
 Image1.Picture.Bitmap.LoadFromResourceName(HInstance,"TOP_IM");
end;

procedure TForm1.FormActivate();
begin
 Image1.Width := StrToInt(Form_razmer.Edit_shirina.Text) div 10;
 Image1.Height := StrToInt(Form_razmer.Edit_visota.Text) div 10;
end;


Больше ничего не надо, типа...


← →
Olivetti   (2007-01-28 18:27) [18]

Или... убери из [17] FormActivate(), и сделай:

procedure TForm_razmer.Edit_shirinaChange();
begin
 Form1.Image1.Width := StrToInt(Form_razmer.Edit_shirina.Text) div 10;
end;

procedure TForm_razmer.Edit_shirinaChange();
begin
 Form1.Image1.Height := StrToInt(Form_razmer.Edit_visota.Text) div 10;
end;


← →
_SuN_   (2007-01-28 21:19) [19]


procedure LoadAvatar(img : timage; ms : tmemorystream; bg : tcolor);
var bmp : tbitmap;
begin
bmp:=tbitmap.Create;
ms.Seek(0,0);
bmp.LoadFromStream(ms);
img.Canvas.Brush.Color:=bg;
img.Canvas.FillRect(rect(0,0,img.Width,img.Height));
if (bmp.Width>bmp.Height)
   then img.Canvas.StretchDraw(rect(0,abs(img.Height-trunc((img.Width/bmp.Width)*bmp.Height)) div 2,img.Width,trunc((img.Width/bmp.Width)*bmp.Height)),bmp)
   else img.Canvas.StretchDraw(rect(abs(img.Width-trunc((img.Height/bmp.Height)*bmp.Width)) div 2,0,trunc((img.Height/bmp.Height)*bmp.Width),img.Height),bmp);
bmp.Destroy;
end;


← →
Olivetti   (2007-01-28 21:30) [20]

_SuN_   (28.01.07 21:19) [19]

М-да...



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

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.027 c
15-1169709149
Ega23
2007-01-25 10:12
2007.02.18
Что может выбить систему до BSOD?


15-1169883327
Piroxyline
2007-01-27 10:35
2007.02.18
На каком языке?


3-1164626798
Wolf82
2006-11-27 14:26
2007.02.18
Отчет в Делфи


2-1170176412
NikNet
2007-01-30 20:00
2007.02.18
Фильтровать поле, Без разницы на SQL или на DELPHI


2-1170242055
asq
2007-01-31 14:14
2007.02.18
графическое отображения связей




   Наверх