![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Картинки в массив и обратно
andrewtitoff © (2012-04-18 17:00:00)Здравствуйте!, подскажите как правильно сохранять картинки в массив из TImage, а потом обратно показывать их?
У меня на форме 5шт TImage, сначала мне нужно загрузить картинки в массив, для этого я использую TImage (в него все нормально грузится), а потом из него пытаюсь сохранить картинку в массив ну и потом обратно из массива показать в нужном TImage но почему-то то-ли не сохраняется в массив, то-ли не отображается... =(((
...
type
OBYA = packed record
DAT : string;
IMG : string;
PRI : string;
HTT : string;
PRS : string;
MET : string;
PIS : TPicture;
PB1 : TPicture;
PB2 : TPicture;
PB3 : TPicture;
PB4 : TPicture;
PB5 : TPicture;
TEP : TPicture;
TEL : string;
end;
....
var
Z: Array of OBYA;
ms: TMemoryStream;
jpeg: TJpegImage;
.....
ms := TMemoryStream.Create;
jpeg := TJpegImage.Create;
try
http1.Get(Z[coun-1].IMG, ms);
ms.Position := 0;
jpeg.LoadFromStream(ms);
Image1.Picture.Graphic := jpeg;
finally
jpeg.Free; ms.Free;
http1.Disconnect;
end;
Z[coun-1].PIS:=Image1.Picture;
.....
Image1.Picture:=Z[i].PB1;
Image2.Picture:=Z[i].PB2;
Image3.Picture:=Z[i].PB3;
Image4.Picture:=Z[i].PB4;
Image5.Picture:=Z[i].PIS;
....
sniknik (2012-04-18 17:59:00) [21]ой, и не говори, что ты "уже понял". почитай лучше ссылку, суть там.
andrewtitoff (2012-04-18 17:58:00) [22]
> в чем суть?
>
>
В беспредметности разговора.. =)))
andrewtitoff (2012-04-18 17:57:00) [23]
> соотв.
> PIS : TJpegImage;
>
>
Ааа, понял, ну в принципе да, только потом же опять как я понял нужны телодвижения что-бы запихнуть его в TImage..?
andrewtitoff (2012-04-18 17:55:00) [24]написал так:
Z[coun-1].PIS:= TPicture.Create;
Z[coun-1].PIS:=Image1.Picture;
только почему-то все равно не работает.. =(((
andrewtitoff (2012-04-18 17:50:00) [25]
> > Image1.Picture:=Z[i].PB1;
> если ты так присваиваешь, то в Z[i].PB1 должен быть "цельный"
> объект, а не ссылка на возможно уже "битый".
> т.е. в коде выше первым должно стоять
> Z[coun-1].PIS:= TPicture.Create;
> дальше все операции с ним, и не в коем случае не делать
> Z[coun-1].PIS.Free; до тех пор пока объект станет реально
> не нужен.
>
>
Так это я уже давно понял благодаря stas-у, просто я написал немножко не правильно (со скобочками) и получил
[DCC Error] Unit1.pas(165): E2010 Incompatible types: 'TPicture' and 'TImage'
вот по этому и спросил.., спасибо что поправили =)))
AV (2012-04-18 17:50:00) [26]если просто, то переделать просто
не
jpeg := TJpegImage.Create;
и потом телодвижения
а сразу
Z[coun-1].PIS := TJpegImage.Create;
соотв.
PIS : TJpegImage;
sniknik (2012-04-18 17:47:00) [27]в чем суть?
andrewtitoff (2012-04-18 17:45:00) [28]
> причина
Причина чего?, не понимания или не желания понимать сути вопроса?..
sniknik (2012-04-18 17:44:00) [29]> Image1.Picture:=Z[i].PB1;
если ты так присваиваешь, то в Z[i].PB1 должен быть "цельный" объект, а не ссылка на возможно уже "битый".
т.е. в коде выше первым должно стоять
Z[coun-1].PIS:= TPicture.Create;
дальше все операции с ним, и не в коем случае не делать Z[coun-1].PIS.Free; до тех пор пока объект станет реально не нужен.
sniknik (2012-04-18 17:39:00) [30]> И к чему это?
причина
andrewtitoff (2012-04-18 17:37:00) [31]
> http://codingrus.ru/readarticle.php?article_id=2867
И к чему это?
Palladin (2012-04-18 17:35:00) [32]http://codingrus.ru/readarticle.php?article_id=2867
andrewtitoff (2012-04-18 17:28:00) [33]
> Потому что Z[coun-1].PIS:=Image1.Picture; это ты присваиваешь
> ссылку. Тебе надо создавать каждый раз новый Image и удалять
> при очистке массива.
>
Ясн, т.е. тогда PIS,PB1..PB5 должны быть TImage а не TPicture или я что то не так понял?
> 1. Вместо динамического массива лучше использовать TStringList
> или подобные
>
Почему?, чем динамический массив плох?
> 2. Я бы хранил TJpegImage вместо Picture
>
>
Опять же в чем разница?, мне это не принципиально, просто хотелось бы знать почему а не просто делать так потому что кто-то так сказал... =)))
stas (2012-04-18 17:15:00) [34]Потому что
Z[coun-1].PIS:=Image1.Picture;это ты присваиваешь ссылку. Тебе надо создавать каждый раз новый Image и удалять при очистке массива.
1. Вместо динамического массива лучше использовать TStringList или подобные
2. Я бы хранил TJpegImage вместо Picture