![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Габариты Image
iamkate © (2005-10-13 09:00:00)Я загружаю из blob-поля в Image картинку вот таким образом:
procedure OpenPage (Sender: TObject);
var buff:ansistring;
lob:tloblocator;
ms:TMemoryStream;
begin
inherited;
if PageControl.ActivePage = tshPhoto Then
begin
With OracleQuery do
begin
DeleteVariables;
DeclareVariable('id',otinteger);
DeclareVariable('photo',otblob);
Sql.Clear;
Sql.Add('Begin K_Read_Photo(:id,:Photo); End;');
SetVariable('id',FKeyFieldValue);
lob:= TLOBLocator.Create(OracleSession,otblob);
SetComplexVariable('photo',lob);
Execute;
lob.SaveToFile('c:\1.bmp');
image.Picture.LoadFromFile('c:\1.bmp');
end;
end;
end;
При этом картинка растягивается по размеру Image и, естественно, получается деформированной.
Подскажите, пожалуйста, как подогнать прпорции Image под размер картинки, чтобы она выводилась в нормальном виде?
И еще, можно ли как-нибудь обойтись без предварительного сохранения картинки в файл, перед загрузкой ее в Image?
ЮЮ (2005-10-14 04:12:00) [1]>На последнюю строчку ругается.
Я тоже ругаюсь, ибо причен для "ругани" здесь много
1) image.Picture (или image.Picture.bitmap) может быть nil
bmp := TBitmap.Create;
try
bmp.LoadFromStream(ms);
image.Picture.Assign(bmp);
finally
bmp.Free
end;
2) стрим не "перемотан" в начало (ms.Position := 0)
iamkate (2005-10-13 12:01:00) [2]У меня была попытка использовать MemoryStream вот таким вот образом:
ms := TMemoryStream.Create;
SetLength(buff, lob.Size);
lob.Read(buff[1],lob.Size);
ms.setSize(length(buff));
ms.Write(buff[1],length(buff));
image.Picture.bitmap.LoadFromStream(ms);
На последнюю строчку ругается.
ЮЮ (2005-10-13 09:07:00) [3]Не сохранять в файл, а - в MemoryStream, откуда загрузить в TBitmap, у которого потом получить Width и Height для расчета размеров TImage