Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [4]  Все   Вниз
  Печать  
Автор Тема: Избавится от циклов при рисовании картинки в Qt  (Прочитано 91894 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #90 : 25-07-2013 13:00 » 

line = (QRgb*)im.bits() + 492*720 - 720 + j;

(QRgb*)im.bits() - всегда возвратит одно и тоже?

Если это вычисляемая "константа" -  выноси ее за цикл.

Согласен с Вами, лучше вынести за цикл, а в цикле обратится к переменной.
Записан
zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #91 : 01-08-2013 08:10 » new

К сожалению я не могу использовать структуры BITMAPFILEHEADER, BITMAPINFOHEADER, так как программа должна без проблем пересобираться под Linux.

Я попытался сделать так:
Код:
QByteArray BMPFile;

BMPFile[0]  = 0x42; // Тип файла. Указывается "B"
BMPFile[1]  = 0x4D; // Тип файла. Указывается "M"

// Считать по little-endian - младший байт располагается в памяти по меньшему адресу
// Записывать по big-endian - старший байт располагается в памяти по меньшему адресу
BMPFile[2]  = 0x76; // Размер файла
BMPFile[3]  = 0x37; // Размер файла
BMPFile[4]  = 0x10; // Размер файла
BMPFile[5]  = 0x00; // Размер файла

BMPFile[6]  = 0x00; // Зарезервированное место под байты равные 0x00
BMPFile[7]  = 0x00; // Зарезервированное место под байты равные 0x00
BMPFile[8]  = 0x00; // Зарезервированное место под байты равные 0x00
BMPFile[9]  = 0x00; // Зарезервированное место под байты равные 0x00

// Количество байт до байт относящихся к картинки
BMPFile[10] = 0x36; // Смещение
BMPFile[11] = 0x00; // Смещение
BMPFile[12] = 0x00; // Смещение
BMPFile[13] = 0x00; // Смещение

// Длина заголовка равняется всегда 40 (0х28)
BMPFile[14] = 0x28;
BMPFile[15] = 0x00;
BMPFile[16] = 0x00;
BMPFile[17] = 0x00;

// Щирина изображения, пикселы (720 пикселов)
BMPFile[18] = 0xD0;
BMPFile[19] = 0x02;
BMPFile[20] = 0x00;
BMPFile[21] = 0x00;

// Высота изображения, пикселы (492 пикселов)
BMPFile[22] = 0xEC;
BMPFile[23] = 0x01;
BMPFile[24] = 0x00;
BMPFile[25] = 0x00;

// Количество плоскостей
BMPFile[26] = 0x01;
BMPFile[27] = 0x00;

// Количество бит на пиксель (24 бит)
BMPFile[28] = 0x18;
BMPFile[29] = 0x00;

// Тип сжатия (без сжатия)
BMPFile[30] = 0x00;
BMPFile[31] = 0x00;
BMPFile[32] = 0x00;
BMPFile[33] = 0x00;

// Размер изображения в байтах (1 062 720)
BMPFile[34] = 0x40;
BMPFile[35] = 0x37;
BMPFile[36] = 0x10;
BMPFile[37] = 0x00;

// Горизонтальное разрешение, точки на метр
BMPFile[38] = 0x00;
BMPFile[39] = 0x00;
BMPFile[40] = 0x00;
BMPFile[41] = 0x00;

// Вертикальное разрешение, точки на метр
BMPFile[42] = 0x00;
BMPFile[43] = 0x00;
BMPFile[44] = 0x00;
BMPFile[45] = 0x00;

// Число используемых цветов (0 - максимально возможное для данной глубины цвета)
BMPFile[46] = 0x00;
BMPFile[47] = 0x00;
BMPFile[48] = 0x00;
BMPFile[49] = 0x00;

// Число основных цветов
BMPFile[50] = 0x00;
BMPFile[51] = 0x00;
BMPFile[52] = 0x00;
BMPFile[53] = 0x00;

mydata1.prepend(BMPFile);

for(int i = 54; i <= mydata1.size(); i = i + 3)
{
          mydata1.insert(i+1, mydata1.at(i));
          mydata1.insert(i+1, mydata1.at(i));
}

Этот цикл зависает всю программу. Пытаюсь его сделать в отдельном потоке, но у меня пока проблема, как передать в slot переменную mydata1. Вот это я пока не понимаю.
Записан
Страниц: 1 2 3 [4]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines