imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 23.11.2004, 20:42     # 1
lokiSE
Newbie
 
Регистрация: 13.10.2004
Сообщения: 28

lokiSE Путь к славе только начался
Exclamation Быстрое отображение битового образа

Есть поток. Из него я декодирую картинки. картинки получаются в таком виде: RGB RGB RGB, т.е. на каждый цвет по 1 байту - 3 байта на пиксел, на картинку - 320*240*3 байта. Все байты лежат в массиве 320*240*3 заподряд. Есть еще на форме компонент picture.
А вопрос такой: как эффективнее всего перенести битовый образ (мой массив, в котором лежат триплеты байтов) на компонент picture, т.е. попросту мой образ нужно отобразить на форму, если можно без компонента picture - еще лучше, т.е. отображать прямо на свободном месте формы мою картинку. Наилучший способ для меня - просто получить указатель на область памяти и скопировать мой массив туда и чтоб после такого копирования картинка появилась на экране в нужном мне месте формы
lokiSE вне форума  
Старый 23.11.2004, 21:56     # 2
Borland
СуперМод
IMHO Консультант 2005-2009
 
Аватар для Borland
 
Регистрация: 14.08.2002
Адрес: Московская ПЛ, ракетный отсек
Пол: Male
Сообщения: 14 501

Borland - Гад и сволочь
lokiSE
Под виндой?
Если да, то надо копать в сторону DirectDraw. Этот API позволяет с максимальной скоростью отображать любые картинки в любую область экрана.
__________________
Не засоряйте форум "спасибами"! Для выражения благодарности существуют ПС и репутация! Соблюдайте Правила!
Распространенье наше по планете
Особенно заметно вдалеке:
В общественном парижском туалете
Есть надписи на русском языке

В. Высоцкий

Borland вне форума  
Старый 23.11.2004, 21:58     # 3
kot_
Junior Member
 
Аватар для kot_
 
Регистрация: 19.11.2004
Адрес: Dnepropetrovsk
Пол: Male
Сообщения: 67

kot_ Путь к славе только начался
Цитата:
Сообщение от lokiSE
Есть поток. Из него я декодирую картинки. картинки получаются в таком виде: RGB RGB RGB, т.е. на каждый цвет по 1 байту - 3 байта на пиксел, на картинку - 320*240*3 байта. Все байты лежат в массиве 320*240*3 заподряд. Есть еще на форме компонент picture.
А вопрос такой: как эффективнее всего перенести битовый образ (мой массив, в котором лежат триплеты байтов) на компонент picture, т.е. попросту мой образ нужно отобразить на форму, если можно без компонента picture - еще лучше, т.е. отображать прямо на свободном месте формы мою картинку. Наилучший способ для меня - просто получить указатель на область памяти и скопировать мой массив туда и чтоб после такого копирования картинка появилась на экране в нужном мне месте формы
Здесь важно то что по сути своей форма - это поверхность на которой ты можешь рисовать. При этом если по задаче нужна поддержка DirectX - значит используешь его и работаешь с поверхностями. Если не нужна - значит рисуешь в памяти а потом используешь функцию копирования. Ну например BitBlt(HDC hdcDest,int xDest,int YDest,int Width,int Height,HDC hdcSours,int XSrs,int YSrs,DWORD Rop) - она как раз и используется для подобных операций.
__________________
kot_ вне форума  
Старый 24.11.2004, 15:20     # 4
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
ИМХО, если исходить из VCL Delphi, то на простом канвасе формы рисовать напрямую можно только через Pixels, однако у TImage уже реализован класс Bitmap с методами загрузки/записи из потока/в поток, и есть ScanLine,в который достаточно быстро можно выгрузить из потока триплеты, только нужно установить формат пикселя и цветовой режим, для триплетов 24 бита и без цветовой палитры... только следует учитывать выравнивания по байту и нужно знать ширину и высоту картинки в пикселях.
/7y3uK вне форума  
Старый 24.11.2004, 15:47     # 5
kot_
Junior Member
 
Аватар для kot_
 
Регистрация: 19.11.2004
Адрес: Dnepropetrovsk
Пол: Male
Сообщения: 67

kot_ Путь к славе только начался
Цитата:
Сообщение от /7y3uK
ИМХО, если исходить из VCL Delphi, то на простом канвасе формы рисовать напрямую можно только через Pixels, однако у TImage уже реализован класс Bitmap с методами загрузки/записи из потока/в поток, и есть ScanLine,в который достаточно быстро можно выгрузить из потока триплеты, только нужно установить формат пикселя и цветовой режим, для триплетов 24 бита и без цветовой палитры... только следует учитывать выравнивания по байту и нужно знать ширину и высоту картинки в пикселях.
Тебя интересует способ быстрого копирования на форму, или тебе необходимо решение для класса TCanvas? Ты опредились. Если тебе необходимо просто загрузить картинку - используй Form1->DoubleBuffered=true;
В дельфях это будет выглядеть наверно Form1.DoubleBuffered = True
После этого ты спокойно можешь реализовать копирование на TCanvas.
__________________
kot_ вне форума  


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

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 01:21.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.