Russian Qt Forum
Ноябрь 25, 2024, 07:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Qt 4.1.1] Вывод большого числа объектов QPaint  (Прочитано 6774 раз)
tv85
Гость
« : Октябрь 11, 2007, 14:40 »

Столкнулся с такой проблемой...
Считываю из файла множество объектов представляющих собой координаты реальных полилиний и полигонов. Соответственно храню их перед выводом на экран в объектах такого класса:
Код:
class MapObject
{
......
......
public:
int NumPoints;
QPolygon vecPoint;
......
};
Когда я начинаю их выводить в paintEvent
Код:
painter.drawPolyline(massiveObj[i]->vecPoint);
возникают огромные проблемы с производительностью и манипуляциями с изображениями, так как объектов несколько тысяч.
Поэтому возникли два вопроса:
1. Можно ли как-нибудь предварительно создать изображение в буфере и выводить его целиком?
2. Можно ли потом все сохранить в bmp файл?
Надеюсь на вашу помощь. Заранее благодарен Улыбающийся
     
Записан
EhTemka
Гость
« Ответ #1 : Октябрь 11, 2007, 19:55 »



1. можно
2. можно

1. вообще это не сложно просто создаешь QPixmap, передаешь его QPainter -у и рисуешь, что тебе надо один раз или когда надо, а затем просто отрисовываешь этот QPixmap.

2. этот же QPixmap можно сохранить. Функция save(...)

Сегодня некогда, завтра напишу подробнее если надо
Записан
tv85
Гость
« Ответ #2 : Октябрь 11, 2007, 21:08 »

Спасибо. Очень буду благодарен, если поможете. Просто для меня это еще не очень изученная область. С нетерпением жду Улыбающийся
Записан
Oleg0412
Гость
« Ответ #3 : Октябрь 12, 2007, 12:55 »

У меня сейчас похожая проблема, но изображения разнообразнее.
QPainterPath не побыстрее ли будет работать, чем  QPixmap?
А какие еще манипуляции надо проводить?
« Последнее редактирование: Октябрь 12, 2007, 13:02 от Oleg0412 » Записан
tv85
Гость
« Ответ #4 : Октябрь 12, 2007, 14:42 »

Да я тоже думал об использовании QPainterPath, но объект этого класса, насколько я понял,  не принимает полилиний (хотя полигоны добавлять можно). Да и потом как мне все это сохранить в bmp (а это очень нужно!!!)?
А манипуляции..., в основном аффинные преобразования + выделение различных частей изображения.
Записан
EhTemka
Гость
« Ответ #5 : Октябрь 12, 2007, 20:32 »

QPixmap pix_(w,h);

QPainter painter(pix_);

painter.begin();
...
тут ресуем что надо
...

painter.end();

paintEvent ( QPaintEvent * event )
{
    QPainter painter;

painter.begin();

    paint.drawPixmap(pix_)  // ресуем нашу картинку   

painter.end();
}

pix_.save("C:\temp.bmp", "BMP");

как-нибудь так можно
« Последнее редактирование: Октябрь 12, 2007, 22:07 от EhTemka » Записан
tv85
Гость
« Ответ #6 : Октябрь 13, 2007, 17:16 »

Спасибо. Во многом прояснило ситуацию и самое главное помогло  Веселый!
Но если можно еще один вопрос...
Можно ли преобразовать сохраненный bmp файл в градиент серого?
Записан
EhTemka
Гость
« Ответ #7 : Октябрь 13, 2007, 18:12 »

Ну на вскидку можно.

Только вместо QPixmap лучше наверно использовать QImage.
Рисовать также как QPixmap, только у него еще есть функция
QVector<QRgb> colorTable () const,

A QRgb, позволяет получить int qGray( QRgb rgb ), смотри assistant.

Проходишь в цикле QVector<QRgb> colors, заменяешь значения QRgb на полученные серошкальные, а затем QImage.setColorTable( const QVector<QRgb> colors)

выглядит примерно так:

    QVector<QRgb> colors = image.colorTable();

    for (int i = 0; i < colors.size(); ++i) {
        QRgb rgb = colors.at(i);       

        int gray = qGray(qRed(rgb), qGreen(rgb), qBlue(rgb));

        QRgb rgbGray = qRgb(gray, gray, gray);

        colors.replace(i,rgbGray);
    }

    image.setColorTable(colors);

Может можно как-то еще, не разбирался, так как сам это делал когда-то без Qt



« Последнее редактирование: Октябрь 13, 2007, 18:37 от EhTemka » Записан
tv85
Гость
« Ответ #8 : Октябрь 13, 2007, 18:19 »

Спасибо...Сегодня же попробую Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 20.