0
이미지 (QPainter)를 병합하려면 프로그램 (C++)을 설치해야합니다. 순차적 인 방식으로 작업이 훌륭하지만 OpenMP와 병렬 처리해야합니다. 어떻게해야합니까? 가능한 문제는 메모리 할당 또는 루프에 중첩 된 것입니다. 그것은 사전에 감사합니다 :)OpenMP 중첩 루프 (Qt 사용)
int width = (x2-x1)+1;
int height = (y2-y1)+1;
//every image is 256x256
QImage mapa = QImage(256*width, 256*height, QImage::Format_ARGB32_Premultiplied);
QPainter painter(&mapa);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
int x=0;
int y=0;
#pragma omp parallel
{
char *kawalek;
#pragma omp parallel for lastprivate(i) firstprivate(j) shared(x1, x2, y1, y2, painter) reduction(+:y, x)
for(i=y1; i<=y2; i++){
x=0;
#pragma omp parallel for shared(x1, x2, i, y, painter) reduction(+:x)
for(j=x1; j<=x2; j++){
{
kawalek = (char*) malloc(snprintf(NULL, 0, "pobrane/%d_%d.png", j, i)+1);
sprintf(kawalek, "pobrane/%d_%d.png", j, i);
//cout << "czesc: " << kawalek << endl;
QImage fragment(kawalek);
painter.drawImage(x, y, fragment);
//cout << "wspolrzedne czesci x: " << x << "y: " << y << endl;
}
x+=256;
}
y+=256;
}
}
painter.end();
mapa.save(filename);
@Riateche, 감사, 여기 내 첫 번째 질문) 그 루프 속도를하지 않는 이유 나의 다음 질문은
...
#pragma omp parallel for private(i) shared(ile)
for(i=0; i<ile; i++){
results[i].load(sciezki[i]);
}
>> 다른 방법은 메인 스레드에 결과 배열을 만드는 것입니다. 배열은 어떻게 생겼을까요? – bgs
예를 들어,'QImage * results = new QImage [count]'. –