|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.01.2008, 18:41 | #1 |
Регистрация: 04.01.2008
Сообщений: 5
|
распаковка .Jpeg
Я получаю с камеры фотографии .jpeg. Эти фотографии я хочу выводить в цикле-тем самым получить видео поток. Но поскольку я вывожу на битмап то необходимо распаковать jpeg и на это у меня уходит 120 мс. Ту же фотографию я открываю с помощью IrfanView и время на загрузку фото уходит 60 мс. Т.е время тратится в 2 раза меньше. Может кто работал с этим и может подсказать как мне быстрее всего выводить .JPEG на интерфейс программы?
Скажу сразу: Я делаю это так: получаю jpeg от IP-камеры в память компьютера, myJpeg.LoadFromStream(memstream); -это загрузка жпега из памяти в объект типа TJpegImage a дальше делаю вот так: Form1.Image1.Picture.Bitmap.Assign( myJpeg); - это присвоение битмапу картинки нашего TJpegImage то есть по сути вывод время замерял и получается что на вторую строчку и уходит очень много времени... Заранее всем спасибо! |
05.01.2008, 15:34 | #2 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
это
Form1.Image1.Picture.Bitmap.Assign( myJpeg); можно заменить на это Form1.Canvas.Draw(0,0,myJpeg); Возможно будет быстрее. Дополнительно к этому можно применить буферизацию. По принципу просмотра видео из интернета. Создать к примеру массив TJpegImage нужной длины и предварительно подгружать в него запас картинок.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
05.01.2008, 15:35 | #3 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
<please delete this>
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 05.01.2008 в 15:39. |
05.01.2008, 16:32 | #4 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Если цель выводить видео забудьте про gdi! Путь ведет к DirectX
|
05.01.2008, 19:08 | #5 |
Регистрация: 04.01.2008
Сообщений: 5
|
как такового видео нет-есть просто поток от камеры в виде фотографий. их камера посылает достаточно быстро 30 мс. а вот сам вывод на экран этих фоток получается очень долго. если же есть идеи с директХ то подскажите. знакомый попробовал найти отличия при выводе жпега с помощью директХ и особой разницы не увидел...
|
06.01.2008, 09:56 | #6 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Вы не понимаете. Не стоит сравнивать gdi и DirectX - незнаю что там Ваш знакомый сравнивал и почему такой вывод сделал. В нашем же случае стоит поставить DelphiX ( найти в интернете не проблема ) потом в коде таймера от DelphiX ( статей не мало в DelphiWorld ) просто перебиваете в BitMap из jpeg и выводите на surface DirectDraw Почитайте стоящая тема, + не все так сложно с компонентами.
А почему разница есть - та пример простой: Почему плеера для вывода юзают не gdi32, а DirectX ? |
08.01.2008, 10:50 | #7 |
Регистрация: 04.01.2008
Сообщений: 5
|
когда я создал тему то и написал как мне перебить jpeg в битмап. пробовал сам использовать directshow-уменьшилось мелькание картинок но скорость осталась преждней. сейчас разбирался с gdi+ и вот какая проблема:
Есть форма. На ней живут кнопка и TImage. В папке с прогой лежат 200 картинок pic1.jpg - pic200.jpg. Глобально объявлены переменные graphics : TGPGraphics; Image: TGPImage; Если в обработчик клика на кнопку вставить такой код: procedure TForm1.Button1Click(Sender: TObject); begin graphics := TGPGraphics.Create(image1.Canvas.Ha ndle ); image:=image.FromFile('pic1.jpg'); graphics.DrawImage(image, 1, 1, Image1.Width-1, form1.Image1.Height-1); end; то картинка рисуется если код такой: procedure TForm1.Button1Click(Sender: TObject); begin graphics := TGPGraphics.Create(image1.Canvas.Ha ndle ); image:=image.FromFile('pic1.jpg'); graphics.DrawImage(image, 1, 1, Image1.Width-1, form1.Image1.Height-1); image1.repaint; sleep(1000); image:=image.FromFile('pic2.jpg'); graphics.DrawImage(image, 1, 1, Image1.Width-1, form1.Image1.Height-1); image1.repaint; end; то рисуется сперва картинка 1, потом, через секунду, картинка 2 (при этом если убрать image1.repaint, то вторая картинка не нарисуется) если же код такой: procedure TForm1.Button1Click(Sender: TObject); var i:integer; begin graphics := TGPGraphics.Create(image1.Canvas.Ha ndle ); for i:=1 to 200 do begin image:=image.FromFile('pic'+inttost r(i)+'.jpg'); graphics.DrawImage(image, 1, 1, Image1.Width-1, form1.Image1.Height-1); image1.repaint; application.ProcessMessages; sleep(1000); end; end; то рисуется только первая картинка, а остальные из цикла - нет. Подозреваю, что это связано с тем, что gdi+ заточен под работу в чистом WinAPI и где-то конфликтует с VCL. Если это так, есть ли способ их таки заставить работать совместно? |
09.01.2008, 01:12 | #8 |
Форумчанин
Регистрация: 31.05.2007
Сообщений: 486
|
Может быть явно использовать Invalidate и Update? Еще можно попробовать InvalidateRect, только её скорее придется применить не к TImage, а к родительскому компоненту, например, к форме.
|
09.01.2008, 08:30 | #9 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Странно... TBitMap.Assign(TJpegImage); - перевод классов. В Таймере от DelphiX - в интервале = 0, пишете
TDXDraw.Surface.Canvas.Draw(0, 0, TBitMap); TDXDraw.Flip; - вот так должно работать. |
10.01.2008, 09:09 | #10 |
Регистрация: 04.01.2008
Сообщений: 5
|
всё оказалось проще-просто gdi+ работает с PaintBox.
Вопрос в частности к Вован13 и всем кто работал с DelphiX. У меня идет поток фотографий .jpeg. Я хочу каждую секунду сохранять фотографию и впоследствии из набора жпег фото сделать видео. Надо наверно копать в сторону DelphiX. Может кто уже занимался этим вопросом и может подсказать поточнее? Итак: из набора .jpeg фото сделать видео. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Jpeg | warmbabe | Общие вопросы по Java, Java SE, Kotlin | 2 | 26.02.2010 20:14 |
Распаковка архивов | Starscream | Общие вопросы Delphi | 2 | 25.06.2009 23:26 |
Распаковка архива. Формат нестандартный. | RoadTrain | Общие вопросы Delphi | 20 | 17.12.2007 22:08 |
Распаковка архива | Kashp | Общие вопросы Delphi | 2 | 23.08.2007 15:08 |
Отправка->Распаковка пакета | Saxon | Работа с сетью в Delphi | 10 | 15.04.2007 20:56 |