Russian Qt Forum
Июнь 16, 2024, 22:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Аналог LockBits, работа с битмапом  (Прочитано 17024 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #30 : Декабрь 18, 2013, 14:51 »

Мне бы как в C# Улыбающийся PixelFormat.Format24bppRgb. Просто ведь тогда быстрее проверять буду разницу. И меньше в памяти занимать будет.
Чуть выше вам дали ответ на вопрос. Конвертируйте картинку в 24-битный формат QImage::convertToFormat() и QImage::Format_RGB888
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #31 : Декабрь 19, 2013, 10:50 »

Просто ведь тогда быстрее проверять буду разницу.
Пиксельные операции для 3 байт значительно медленнее чем для 4 (где можно привести к int). Да и даже не в этом дело. Любой имедж можно перегнать в ARGB32 и иметь всего 1 вариант кода. А начиная мутить с 3-мя байтами этой уверенности нет. Появится имедж с альфой - и опять придется суетиться, оно Вам надо?
Записан
GPPsoft
Гость
« Ответ #32 : Декабрь 20, 2013, 06:24 »

Ребята. Как прорисовать участок одного QBitmap в другой? Опять же на C# я делал так:

Код
C#
Bitmap newBitmap = new Bitmap(rects[i].Width, rects[i].Height, PixelFormat.Format24bppRgb);
Graphics graphics = Graphics.FromImage(newBitmap);
graphics.DrawImage(currentRegionMap, new Rectangle(0, 0, rects[i].Width, rects[i].Height), rects[i], GraphicsUnit.Pixel);
graphics.Dispose();
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #33 : Декабрь 20, 2013, 07:13 »

QPainter::drawImage
Записан
GPPsoft
Гость
« Ответ #34 : Декабрь 20, 2013, 07:14 »

QPainter::drawImage
Спасибо. Кажется мне подойдет QImage::copy
Записан
GPPsoft
Гость
« Ответ #35 : Декабрь 22, 2013, 10:24 »

QPainter::drawImage
Не пойму как это использовать. Мне нужно один QImage нарисовать в другом QImage. Разобрался.
« Последнее редактирование: Декабрь 22, 2013, 10:27 от GPPsoft » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #36 : Декабрь 22, 2013, 10:29 »

Не пойму как это использовать. Мне нужно один QImage нарисовать в другом QImage.
Код
C++ (Qt)
QImage surf;
QPainter p( &surf );
p.drawImage( ... );
 
Записан
GPPsoft
Гость
« Ответ #37 : Декабрь 23, 2013, 06:27 »

Как можно напрямую скопировать участок из QImage в другой QImage? Такое возможно?
Сейчас скопирую так:
Код:
QPainter painter(&screenMap);
............................................................
painter.drawImage(QPoint(xPos[i],yPos[i]),regions[i]);
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #38 : Декабрь 23, 2013, 12:38 »

Как можно напрямую скопировать участок из QImage в другой QImage? Такое возможно?

Если я правильно понял, то QImage::copy(). Если неправильно, что через прямой доступ к байтам через QImage::bits()
Записан
GPPsoft
Гость
« Ответ #39 : Декабрь 24, 2013, 05:57 »

Сделал так. Не знаю.. может можно сделать оптимальнее? Вообщем я думаю это тоже самое что и QPainter::drawImage
Код:
void ScreenAnalyzer::copyRegion(QImage &srcImage, QImage &dstImage, int x, int y)
{
    int pixLen=3;
    int dstXOffset=pixLen*x;
    for(int i=0;i<srcImage.height();i++)
    {
        uchar* srcXPoint = srcImage.scanLine(i);
        uchar* dstXPoint = dstImage.scanLine(y+i);dstXPoint+=dstXOffset;
        memcpy(dstXPoint,srcXPoint,srcImage.width()*pixLen);
    }
}
Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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