Вниз
Скачать: 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.965 c
15-1169830589
oldman
2007-01-26 19:56
2007.02.18
Почему компьютер так говорит?


2-1170018465
san1
2007-01-29 00:07
2007.02.18
real в integer


15-1169692922
IMHO
2007-01-25 05:42
2007.02.18
Солженицын велик?


2-1170424258
Garacio
2007-02-02 16:50
2007.02.18
Текущая дата в формате dd.mm.yy


15-1169958407
Дмитрий Белькевич
2007-01-28 07:26
2007.02.18
Потестируйте, пожалуйста, программу, запуск программы как сервиса




   Наверх