Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > bmp в массив с испльзованием QT3


Автор: Zabava 2.8.2009, 11:04
Как по средствам QT3, bmp файл перевести в массив? Идею обрабатывания каждого пикселя отдельно не предлагать)  

Автор: andrew_121 2.8.2009, 11:38
Zabava, Смотри QImage

Автор: Zabava 3.8.2009, 21:58
я нашёл только QRgb QImage::pixel ( int x, int y ) const, но это попиксельная обратотка, уж очень медленно, как можно перевести bmp в массив, быстрее?

Автор: Mal Hack 3.8.2009, 22:06
Не готов утверждать на счет 3 Qt, но в 4 можно сделать что-то вроде:
Код
    QImage img(dirName + fileName, "PNG"); 

    if (img.isNull())
    {
        return;
    }

    std::vector<QRgb> colTbl = img.colorTable().toStdVector();

    std::vector<QRgb>::iterator it = colTbl.begin();
    std::vector<QRgb>::iterator itEnd = colTbl.end();

    double N = img.numColors();

    double rs = 0.0, gs = 0.0, bs = 0.0;
    QColor clr;

    while(it != itEnd)
    {
        clr =(*it);

        rs += clr.red();
        gs += clr.green();
        bs += clr.blue();

        it++;
    }


Приходилось проверять результат на достоверность. Результат идентичен попиксельному проходу. Обращаю внимание, подобный подход вернет цветовую таблицу, т.е. все цета - уникальные. Результат может отличаться, от того, что вы будете видеть на экране. Т.е. к примеру при использовании Mosaic Blur большую картинку можно интегриовать. При этом визуально вы можете видеть 5-6 клеток с различными цветами, а вышеуказанный код дас их вам около 30, к примеру. Сравнивалось в Ulead PhotoImpact X3.

Еще уточнение. Картинка не должна быть TrueColor. Только Indexeed (Маску Green, even ... выбираете сами). Работает 100% с PNG. С JPEG у меня не получалось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)