|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вывести на форму картинку, находящуюся в байтовом массиве
Подскажите, как вывести на форму картинку JPG или Gif, находящуюся в байтовом массиве? Если непонятно что имеется в виду под байтовым массивом, вот ответ:
var a : array [1..65535] of byte; в массиве картинка находится целиком, т.е. так, как если б она находилась в файле. Грузить из файла-то понятно как - LoadFromFile, а вот как грузить из массива? Нужно это для того чтобы была возможность быстро менять картинки, помещая данные в массив и потом выводя данные из массива на форму. Можно, конечно, создавать временный файл, сохраняя туда данные о картинке и читай потом оттуда, но мне этот вариант не нравится по некоторым причинам, одна из которых низкое быстродействие, вторая - не хочется "засирать" каталог с программой либо какой-либо иной временными файлами своей программы. Для отображения .gif планируется использовать компонент RxGifAnimator из пакета RxLib, для вывода .jpg пойдет и стандартный Image. Только вот как картинку в них грузить? Теоретически это возможно через потоки - я так понимаю нужно в поток записать массив, потом из потока прочесть картинку, только как это сделать, мож кто подскажет? Ибо с потоками дело никогда не имел Последний раз редактировалось s.Mobi, 12.11.2007 в 00:49. |
#2
|
|||
|
|||
Тоже проблема
У меня тоже такая проблема
|
#3
|
||||
|
||||
Дело в том, что эти форматы сжаты при помощи специальных алгоритмов
http://articles.org.ru/docum/jpeg.php Для получения картинки из этого массива байт нужно поработать со спецификацией формата...Вот к примеру jpg http://www.martinreddy.net/gfx/2d/JPEG.txt Ну или на русском и популярно... http://ru.wikipedia.org/wiki/JPEG Таким образом нужно фактически распаковать массив байт в двумерный массив изображения согласно исхоному размеру картинки взятый из спецификации... Это если все делать ручками, но наверняка есть в сети алгиритмы которые сделают это за вас... В начале был Бит, потом Байт и только потом появилось Слово... |
#4
|
||||
|
||||
Для TImage предложил бы такой вариант.
Создаете TPicture. В него в потоке ( пока одно изображение показывается ) загружаете следующее. Код:
Picture.LoadFromFile Код:
Image.SetPicture(Value: TPicture); |
#5
|
||||
|
||||
Нафига такие сложности?
Создаете динамичнский массив из TImage. Загружаете в него сколько нужно картинок. Выводите на форму из массива нужную картинку. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
У меня потоки с ассоциировались с нитями ( TThread ).
Т.е. чтоб без подвисания формы. А так практически все равно будет, хоть в массив TImage, хоть в массив TPicture. |