Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: tv85 от Октябрь 11, 2007, 14:40



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


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: EhTemka от Октябрь 11, 2007, 19:55


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

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

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

Сегодня некогда, завтра напишу подробнее если надо


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: tv85 от Октябрь 11, 2007, 21:08
Спасибо. Очень буду благодарен, если поможете. Просто для меня это еще не очень изученная область. С нетерпением жду :)


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: Oleg0412 от Октябрь 12, 2007, 12:55
У меня сейчас похожая проблема, но изображения разнообразнее.
QPainterPath не побыстрее ли будет работать, чем  QPixmap?
А какие еще манипуляции надо проводить?


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: tv85 от Октябрь 12, 2007, 14:42
Да я тоже думал об использовании QPainterPath, но объект этого класса, насколько я понял,  не принимает полилиний (хотя полигоны добавлять можно). Да и потом как мне все это сохранить в bmp (а это очень нужно!!!)?
А манипуляции..., в основном аффинные преобразования + выделение различных частей изображения.


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: EhTemka от Октябрь 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");

как-нибудь так можно


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: tv85 от Октябрь 13, 2007, 17:16
Спасибо. Во многом прояснило ситуацию и самое главное помогло  :D!
Но если можно еще один вопрос...
Можно ли преобразовать сохраненный bmp файл в градиент серого?


Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: EhTemka от Октябрь 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





Название: Re: [Qt 4.1.1] Вывод большого числа объектов QPaint
Отправлено: tv85 от Октябрь 13, 2007, 18:19
Спасибо...Сегодня же попробую :)