Не готов утверждать на счет 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 у меня не получалось. |