![]() |
| ||
|
|
Новости |
Поиск |
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;
....
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);
Учите матчасть