Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: SubaroMows от Май 23, 2012, 17:24



Название: # pragma omp parallel for
Отправлено: SubaroMows от Май 23, 2012, 17:24
Код:
    #  pragma  omp  parallel  for
    for(int i = 0; i < image.height(); i++) {
        for(int j = 0; j < image.width(); j++)
            if(findBrightness(image.pixel(j,i)) > threshold)
                image.setPixel(j,i,QColor(255,255,255).rgb());
            else
                image.setPixel(j,i,QColor(0,0,0).rgb());
    }

Выдаёт чёрное изображение, без  #  pragma  omp  parallel  for работает нормально.
Здесь ведь никаких перекрытий нет? работаем с каждым пикселем независимо.
Подскажите, в чём проблема. Почему не параллелиться.


Название: Re: # pragma omp parallel for
Отправлено: DmitryM от Май 23, 2012, 21:50
Есть одно предположение, но озвучивать пока не стану.
Попробуй для получения указателя на строчку матрицы
Код:
uchar * QImage::scanLine ( int i )
и работать с это строкой
Код:
   #  pragma  omp  parallel  for
    for(int i = 0; i < image.width(); i++) {
        uchar row = image.scanLine ( i );
        for(int j = 0; j < image.height(); j++)
            if(findBrightness( (QRbg) row[j]) > threshold)
                row[j] = qRgb ( 255,255,255);
            else
                row[j] =qRgb ( 0,0,0);
    }