Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Картинки в массив и обратно


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо