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;

....


andrewtitoff   (2012-04-20 09:23:00) [1]


> феерические люди были есть и будут быть...

Что-то не так?.. =)))
Хотите поговорить об этом? ;)))


Palladin   (2012-04-20 00:09:00) [2]

феерические люди были есть и будут быть...


andrewtitoff   (2012-04-19 16:26:00) [3]


> Так же как JPEG, только в uses PNG надо включить, не знаю
> стандартный модуль есть или нет

Спс, правда я еще ссылку на картинку не разобрался как получить, как разберусь - попробую


stas   (2012-04-19 15:22:00) [4]

Так же как JPEG, только в uses PNG надо включить, не знаю стандартный модуль есть или нет


andrewtitoff   (2012-04-19 15:04:00) [5]

А может быть еще кто-нибудь подскажет как загрузить картинку PNG ? =)))


andrewtitoff   (2012-04-19 13:05:00) [6]


> почитал бы ссылку, вник, вместо "упрямства".

Да прочитал я ее давно уже, ничего нового там нет, просто опыт нужен, которого у меня нет.

> ну как же допер, "додолбили"... с самого начала только это
> и пишут.

Ну так я и говорю что тупанул, подумал сначала только про TImage которые на форме, а то-что в массиве все тоже самое у меня - не подумал... =))))


sniknik   (2012-04-19 12:59:00) [7]

> чет я не допер что это не просто элемент массива а объект =)))
ну как же допер, "додолбили"... с самого начала только это и пишут.


sniknik   (2012-04-19 12:57:00) [8]

> почему у меня тогда получилось
предполагаю, что там, тогда, был TImage на обоих сторонах, а у него Picture метод, где в обработчике "усе путем"...
почитал бы ссылку, вник, вместо "упрямства".


andrewtitoff   (2012-04-19 12:56:00) [9]


> Z[coun-1].PIS.Assign(Image1.Picture)


Да, спасибо, попробовал, так вроде работает, действительно чет я не допер что это не просто элемент массива а объект =)))
P.S.
Эх, как чудесно все было 15 лет назад в паскале, все можно было реализовать без объектов, да винда еще не была в ходу(3.11 не в счет), все просто и понятно, на прямую к железу =)))


andrewtitoff   (2012-04-19 12:49:00) [10]


> Пойми когда пишешь равно ты приравниваешь ссылку, а не содержимое.

Ааа, понял, спс, сейчас попробую.

только я не понял тогда почему у меня тогда получилось в цикле вывода при первом прохождении цикла выдал картинки (с нужным индексом или нет не разбирался), при чем переделано в цикле вывода было только для одного TImage, а остальные были по старому Image1.Picture:=Z[i].PB1;, но тем не менее показал 5 картинок, но уже на втором прохождении цикла и до конца все 5 TImage были пусты...


stas   (2012-04-19 12:00:00) [11]

andrewtitoff ©   (19.04.12 11:48) [22]
Пойми когда пишешь равно ты приравниваешь ссылку, а не содержимое.
Допустим

1. в гостиничный номер №36 поселен andrewtitoff
2. Z[1].PIS=№36
3. На следующей итерации в №36 поселился Ega
4. Z[2].PIS=№36
У тебя получилось что все элементы массива ссылаются на №36 и во всех живет Ega. А Assign забирает именно кто же живет в этом номере...

Понятно ))?


stas   (2012-04-19 11:54:00) [12]

Z[coun-1].PIS.Assign(Image1.Picture)


andrewtitoff   (2012-04-19 11:48:00) [13]


> Ну, это вы показали вывод из массива, а как загружаете в
> массив?


Так вроде как писал уже, или вы про что?...


> Z[coun-1].PIS:= TPicture.Create;
>  Z[coun-1].PIS:=Image1.Picture;
>


У меня пока что только один раз нужно загрузить т.е. для каждого Z[i].PIS в цикле я делаю это один раз


stas   (2012-04-19 11:24:00) [14]

andrewtitoff ©   (19.04.12 10:24) [19]

Ну, это вы показали вывод из массива, а как загружаете в массив?


stas   (2012-04-19 11:21:00) [15]


> Ega23 ©   (19.04.12 09:14) [18]
> Возможно вы мало программировали.

Возможно, приведите пример, буду знать на будущее

>Сначала битмап привести к джпегу

Зачем? он загружает jpeg.


andrewtitoff   (2012-04-19 10:24:00) [16]


> а за вот этим присваиванием
>  Image1.Picture:=Z[i].PIS
> Дельфи сама ставит такой код
>  Image1.Picture.Assign(Z[i].PIS);


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


for i := 0 to coun-1 do
begin
  RichEdit1.Lines.Add(Z[i].DAT);
  ...
  Image5.Picture.Assign(Z[i].PIS);

  Application.ProcessMessages;
  Sleep(1000);
  Application.ProcessMessages;
end;


Ega23   (2012-04-19 09:14:00) [17]


> 1. Не встречал случаев когда это противопоказано.


Возможно вы мало программировали.


> а со Stream чтобы выгрузить надо будет еще движения какие-то делать.


А с TJPEGImage - не надо???? Сначала битмап привести к джпегу, потом заассайнить его с элементом массива (через тот же стрим). Да, ещё создать надо...


stas   (2012-04-19 09:08:00) [18]


> Почему?, чем динамический массив плох?

Не нужно голову морочить с выделением памяти и т.д. в TSTringList есть минимальный набор методов для работы c динамическими массивами

Ega23 ©   (18.04.12 18:55) [16]
1. Не встречал случаев когда это противопоказано.
2.Потому что битмап занимает больше места в ОЗУ, а со Stream чтобы выгрузить надо будет еще движения какие-то делать.


Ega23   (2012-04-18 18:55:00) [19]


> stas ©   (18.04.12 17:15) [1]
>
> 1. Вместо динамического массива лучше использовать TStringList или подобные


Иногда. Иногда - нет. Иногда - ваще противопоказано.


> 2. Я бы хранил TJpegImage вместо Picture


Почему не битмап? Почему не MemoryStream?


icWasya   (2012-04-18 18:13:00) [20]

Вот это
Z[coun-1].PIS:= TPicture.Create;
надо сделать один раз

А вместо этого
Z[coun-1].PIS:= Image1.Picture;
можно несколько раз делать
Z[coun-1].PIS.Assign(Image1.Picture);

а за вот этим присваиванием
  Image1.Picture:=Z[i].PIS
Дельфи сама ставит такой код
  Image1.Picture.Assign(Z[i].PIS);

Учите матчасть


Страницы:   1 2

Наверх

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