Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: crazymonkey от Июль 11, 2014, 11:09



Название: Есть ли возможность заполнить QImage из нескольких потоков?
Отправлено: crazymonkey от Июль 11, 2014, 11:09
Вводная такова: у меня есть файл размером 100 мегабайт внутри у него значения амплитуды сигнала.

Соответственно как сделано сейчас:
Читается пачками байт. Заполняется QImage построчно.
Количество строк в изображении я знаю заранее.

Вопрос: могу ли я заполнить OImage в несколько потоков? и что для этого нужно сделать? я что-то слышал про штуку "отображение файла в память" но не знаю как её применить.

Огромное спасибо за ваше время.


Название: Re: Есть ли возможность заполнить QImage из нескольких потоков?
Отправлено: Igors от Июль 11, 2014, 11:12
QImage и так прекрасно "отображен". Разбиваете на полосы (по числу заполняющих ниток) дальше см QImage::scanLine


Название: Re: Есть ли возможность заполнить QImage из нескольких потоков?
Отправлено: crazymonkey от Июль 11, 2014, 11:28
QImage и так прекрасно "отображен". Разбиваете на полосы (по числу заполняющих ниток) дальше см QImage::scanLine

А можно "для дураков" расписать поподробнее, если вам не сложно ?


Название: Re: Есть ли возможность заполнить QImage из нескольких потоков?
Отправлено: Igors от Июль 11, 2014, 11:45
Пример ф-ция заполнения
Код
C++ (Qt)
void FillImagePart( QImage & img, int beg, int end, QRgb color )
{
Q_ASSERT(img.format() == QImage::Format_ARGB32);
for (int y = beg; y < end; ++y) {
  QRgb * dst = (QRgb *) img.scanLine(y);
  for (int x = 0; x < img.width(); ++x)
    dst[x] = color;
}
}
Ну и один поток заполняет напр строки 0..100, второй 100..200 и.т.д.