Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: Булат от Апрель 14, 2011, 12:36



Название: QImage обработка png
Отправлено: Булат от Апрель 14, 2011, 12:36
Всем привет.
Решается задача модификации вывода текстурного шрифта.
В настоящий момент выводимый шрифт выводится как моноширинный,
требуется реализовать вывод в естественном виде.

Собственно, задача сводится к сканированию справа и слева текстуры шрифтов для определения ширины символов.
Тут возникли непонятки. При обращении к QImage.Pixel() выдаются неверные данные. (я так думаю)
Текстура приличного размера 1024*1024, rgb32. 256 символов, по 16 в строку.
Возможно ошибка в алгоритме сканирования текстуры.
Готов выслушать ваши мнения.

Код:
QRgb back = fontTexture.pixel(0,0);

int row = 0, col = 0;
for (int c = 0; c < 256; c++, col++)
{
if (col == 16) {
col = 0;
row++;
}

int xOffset = col*CHARPIX;
int yOffset = row*CHARPIX;

int xmin = CHARPIX-1;
int xmax = 0;
bool dobreak = false;
QRgb p;
for (int x = 0; x < CHARPIX; x++) {
for (int y = 0; y < CHARPIX; y++) {
p = fontTexture.pixel(xOffset+x, yOffset+y);
if (p == back) continue;
xmin = x;
dobreak = true;
}
if (dobreak) break;
}
symInfos[c].xmin = xmin;

dobreak = false;
for (int x = CHARPIX-1; x >= 0; x--) {
for (int y = 0; y < CHARPIX; y++) {
p = fontTexture.pixel(xOffset+x, yOffset+y);
if (p == back) continue;
xmax = x;
dobreak = true;
break;
}
if (dobreak) break;
}
symInfos[c].xmax = xmax;
}