|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с TJPEGImage
Здравствуйте! У меня есть картинка jpg, скаченная из инета с помощью idHTTP и помещенная в переменную типа string. Мне необходимо перевести эту картинку в формат BMP и работать с ней уже как с типом TBitmap, но при этом для ускорения работы программы нельзя пользоваться сохранением картинки на жесткий диск и последующим чтением с помощью функций которые есть в различных примерах в сети.
Вот на всякий случай один из вариантов предлагаемых на просторах интернета: Код:
uses JPEG; procedure JPEGtoBMP( const FileName: TFileName); var jpeg: TJPEGImage; bmp: TBitmap; begin jpeg := TJPEGImage.Create; try jpeg.CompressionQuality := 100 ; {Default Value} jpeg.LoadFromFile(FileName); // нужен какой то аналог такой функции, но чтобы загрузка изображения шла именно из переменной типа string bmp := TBitmap.Create; try bmp.Assign(jpeg); // операции с картинкой ... finally bmp.Free; end; finally jpeg.Free; end; end; Если есть решение - пожалуйста приведите хотябы набросок кода! Последний раз редактировалось ssman, 28.05.2012 в 21:29. |
#2
|
||||
|
||||
Насколько я знаю, у TJpegImage есть метод LoadFromStream. Следовательно, достаточно скачать файл из инета во что-то из TStream-о подобных и грузить оттуда.
З.Ы. Запихнуть картинку в строку - я думал, что это я маньяк, но меня явно переплюнули. jmp $ ; Happy End! The Cake Is A Lie. |
Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
ssman (29.05.2012)
|
#3
|
|||
|
|||
TJPEGImage.DIBNeeded
|
#4
|
|||
|
|||
Bargest, спасибо, заработало! Скачал картинку в переменную типа TMemoryStream , и использовал LoadFromStream для TJpegImage . Для проверки это выполняется по нажатию кнопки.
Потом воплотил эту идею в моей программе, не хочу выкидывать тот треш что я написал, там много, но суть такая: по таймеру идет выполнение следующих действий: В цикле (раз 50 он выполняется) скачивается картинка -> преобразуется в bmp -> обрабатывается. В начале цикла делаю Stream:=TMemoryStream.Create, в конце - Stream.Free. В итоге выполняется тело события по таймеру один раз и вылетает ошибка. Причем выполняется абсолютно всё что нужно было. Ошибка в приложении. В чем может быть дело? |
#5
|
|||
|
|||
Сам с такой же проблемой столкнулся, дело в том что используешь компоненты работающие в параллельном потоке, и как только начинаешь пользоваться переменными типа Tstream или Pointer то возникает какое то левое обращение к памяти когда уже уничтожил содержимое
|