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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QImage обработка png  (Прочитано 2502 раз)
Булат
Гость
« : Апрель 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;
}

« Последнее редактирование: Апрель 14, 2011, 12:42 от Булат » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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