crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Попиксельное заполнение буфера
loh
  опции профиля:
сообщение 21.12.2011, 16:37
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 60
Регистрация: 11.5.2008
Пользователь №: 171

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет!

Задача такая, у меня есть датчик, типа линейного сканера, от него приходят данные представляющие собой двух байтные числа которые после некоторой математической обработки связанной с операциями сложения умножения деления вычитается превращаются либо в цвет точки. соответственно один пакет этих чисел это одна колонка пикселей на экране. Каждая новая колонка приходит на место старой, а вся картинка смещается на один пиксел в сторону. Проблема в том что частота прихода этих пакетов высокая - например 200 пакетов в секунду,

Так вот! как организовать буфер для сохранения исходных значений с датчика, буфер с обработанными значениями для вывода на экран, как синхронизировать вывод с приёмом, что бы картинка смешалась плавно, без рывков? И как сделать быструю обработку исходных значений для преобразования их в цвет уже в офлайн режиме, когда данные берутся не с датчика, а с буфера исходных данных? :о
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Abesh
  опции профиля:
сообщение 17.1.2012, 17:11
Сообщение #2


Студент
*

Группа: Новичок
Сообщений: 13
Регистрация: 4.6.2010
Пользователь №: 1780

Спасибо сказали: 2 раз(а)




Репутация:   0  


У меня по теме есть вопрос:
Проблема вот в чем, есть класс, унаследованный от QGraphicsScene, вот что из себя представляет drawBackground
void FrameScene::drawBackground (QPainter *painter, const QRectF & rect)
{
    float xposition=-1.0, yposition=-1.0;
    if (painter->paintEngine()->type() != QPaintEngine::OpenGL && painter->paintEngine()->type() != QPaintEngine::OpenGL2)
    {
        qWarning("FrameScene: drawBackground needs a QGLWidget to be set as viewport on the graphics view");
        return;
    }
    float zoom =1.0;
    float zoomX =1.0, zoomY=1.0;
    
    zoom = 1.0;
    if(img.getLinesNumber() > sceneRect().height() || img.getColumnsNumber() > sceneRect().width() )
    {
        zoomY = static_cast<float>(this->sceneRect().height())/img.getLinesNumber();
        zoomX = static_cast<float>(this->sceneRect().width())/img.getColumnsNumber();
        zoom = qMin(zoomX, zoomY);
    }
    xposition = -zoom/(static_cast<float>(this->sceneRect().width())/img.getColumnsNumber());
    yposition = -zoom/(static_cast<float>(this->sceneRect().height())/img.getLinesNumber());
    
    glDisable(GL_ALPHA_TEST);
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
    
    glRasterPos2f(xposition, yposition);
    glPixelZoom(zoom, zoom);
    quint32 first=(img.data())[0];
    glDrawPixels (img.getColumnsNumber(), img.getLinesNumber(), GL_RGBA, GL_UNSIGNED_BYTE, img.data() );
}



img — это массив, хранящий изображение в градациях серого. Если ему подсунуть боевое изображение, то н-тысяч первых пикселей будут черными (естественно я проверял значение, которое ему подсовывают, там все совсем иное), если же где-то тупо memset-ом забить массив все будет ок. Что я не так делаю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- loh   Попиксельное заполнение буфера   21.12.2011, 16:37
- - ViGOur   Ну как я понимаю для это тебе нужно 3 потока и два...   24.12.2011, 10:32
- - loh   я так пробовал, там какая сложность была: чтобы вы...   24.12.2011, 12:34
- - ViGOur   Никаких циклов! Пришли данные для буфера №1, е...   24.12.2011, 13:22
- - loh   так я кажется пробовал тоже, и тогда это всё как-т...   24.12.2011, 17:12
- - ViGOur   А если у тебя поток данных вырастет ещё раз в 100,...   24.12.2011, 19:33
- - loh   ок, я так и делал, а мьютексы делать? а, да, и ещ...   24.12.2011, 21:13
- - ViGOur   Цитата(loh @ 24.12.2011, 22:13) ок, я так...   24.12.2011, 22:56
- - BlueIceScream   Для правильной реализации решения задачи производи...   24.12.2011, 23:04
- - loh   ну мне кажется qimage какое то лишнее звено которо...   24.12.2011, 23:42
- - BlueIceScream   QImage предоставляет аппаратно-независимый подход ...   25.12.2011, 1:52
|- - loh   Цитата(BlueIceScream @ 25.12.2011, 1:52) ...   26.12.2011, 16:11
|- - wiz29   Цитата(loh @ 26.12.2011, 17:11) Я сейчас ...   26.12.2011, 16:20
- - loh   блин как спросить то чтобы понятно было вот й qi...   26.12.2011, 22:03
- - BlueIceScream   Скорость работы функций QPainter напрямую зависит ...   26.12.2011, 22:31
- - loh   тоесть например QImage img; QGLPixelBuffer* pb = ...   26.12.2011, 23:30
- - BlueIceScream   Если вы используете QImage или QGLBuffer, то зачем...   27.12.2011, 0:38
- - loh   qpainter ом мне в опенгл разбираться долго чето н...   27.12.2011, 1:30
- - BlueIceScream   QPainter при выводе обязательно переводит QImage в...   27.12.2011, 2:33
- - loh   А можно qglwidget & qgraphicsscene объединить,...   27.12.2011, 6:48
- - wiz29   как я понял, тебе нужно выводить нечто в виде осци...   27.12.2011, 8:33
- - Sokoloff   Цитата(loh @ 21.12.2011, 17:37) Проблема ...   27.12.2011, 9:23
- - loh   У меня с тормозами даже кадров 5-6 в секунду было,...   27.12.2011, 10:24
|- - wiz29   Цитата(loh @ 27.12.2011, 11:24) Типа осци...   27.12.2011, 10:39
- - loh   Вооо класс! Я знал что должна быть какая то шт...   27.12.2011, 13:35
|- - wiz29   Цитата(loh @ 27.12.2011, 14:35) а как поп...   27.12.2011, 13:59
- - loh   А не знаешь, аппаратный скрол только в пиксмапе? В...   27.12.2011, 14:16
- - wiz29   qgraphicsitem может кешироваться подсистемой qgrap...   27.12.2011, 14:17
- - BlueIceScream   ЦитатаТипа осцилограммы нормально выводится, мне н...   27.12.2011, 18:19
|- - loh   Цитата(BlueIceScream @ 27.12.2011, 19:19)...   27.12.2011, 23:07
- - BlueIceScream   Такое использование буфера будет на мой взгляд быс...   28.12.2011, 1:21
- - loh   А как сделать зуммирование при рисовании картинки ...   28.12.2011, 14:14
- - BlueIceScream   Можете попробовать: void glPixelZoom( GLfloat x...   28.12.2011, 21:22
- - loh   Пока разбираюсь, полет нормальный, такой вопрос во...   29.12.2011, 10:47
- - BlueIceScream   Эта ветка по Qt. Если есть вопросы по работе функц...   29.12.2011, 16:09
|- - whatevillurks   Зачот получается вы даете не профессиональные сове...   29.12.2011, 16:13
- - BlueIceScream   Конечно же нет. Я не профессионал. Я вообще не про...   29.12.2011, 16:24
- - Abesh   У меня по теме есть вопрос: Проблема вот в чем, ес...   17.1.2012, 17:11


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 11:33