Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.05.2012, 21:12
ssman ssman вне форума
Прохожий
 
Регистрация: 28.05.2012
Сообщения: 2
Репутация: 10
Стрелка Проблема с 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  
Старый 28.05.2012, 21:21
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Насколько я знаю, у TJpegImage есть метод LoadFromStream. Следовательно, достаточно скачать файл из инета во что-то из TStream-о подобных и грузить оттуда.
З.Ы. Запихнуть картинку в строку - я думал, что это я маньяк, но меня явно переплюнули.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
Этот пользователь сказал Спасибо Bargest за это полезное сообщение:
ssman (29.05.2012)
  #3  
Старый 28.05.2012, 21:37
robt robt вне форума
Активный
 
Регистрация: 17.02.2011
Сообщения: 298
Репутация: -1806
По умолчанию

TJPEGImage.DIBNeeded
Ответить с цитированием
  #4  
Старый 29.05.2012, 12:43
ssman ssman вне форума
Прохожий
 
Регистрация: 28.05.2012
Сообщения: 2
Репутация: 10
По умолчанию

Bargest, спасибо, заработало! Скачал картинку в переменную типа TMemoryStream , и использовал LoadFromStream для TJpegImage . Для проверки это выполняется по нажатию кнопки.

Потом воплотил эту идею в моей программе, не хочу выкидывать тот треш что я написал, там много, но суть такая: по таймеру идет выполнение следующих действий:
В цикле (раз 50 он выполняется) скачивается картинка -> преобразуется в bmp -> обрабатывается. В начале цикла делаю Stream:=TMemoryStream.Create, в конце - Stream.Free.

В итоге выполняется тело события по таймеру один раз и вылетает ошибка. Причем выполняется абсолютно всё что нужно было. Ошибка в приложении.
В чем может быть дело?
Изображения
Тип файла: jpg 123.jpg (58.4 Кбайт, 25 просмотров)
Ответить с цитированием
  #5  
Старый 24.12.2012, 09:30
sergeyrca sergeyrca вне форума
Прохожий
 
Регистрация: 08.12.2012
Сообщения: 10
Репутация: 10
По умолчанию

Сам с такой же проблемой столкнулся, дело в том что используешь компоненты работающие в параллельном потоке, и как только начинаешь пользоваться переменными типа Tstream или Pointer то возникает какое то левое обращение к памяти когда уже уничтожил содержимое
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter