Cześć!
Przy wywoływaniu
void codec::on_MAP_clicked()
{
for(int y=1; y<height-1; y++)
{
for (int x=1; x<width-1; x++)
{
picture_copy.setPixel(x, y, call_MAP(x, y));
}
}
}
otrzymuję szereg komunikatów:
QImage::setPixel: Index ... out of range
gdzie metoda call_MAP(x,y) zwraca zmienną typu QRgb o wpółrzędnych (x, y) a picture i picture_copy to QImage, do których ładowany jest obraz .bmp.
Komunikaty wskazywałyby na przekroczony zakres ale nie bardzo wiem czym jest to spowodowane (wydawało mi się, że zabezpieczenie na wypadek przekroczenia zakresu zapewniłam przy pętlach for ale jak widać to było błędne założenie). Czy możliwe, że problem leży po stronie kompilatora?
Będę wdzięczna za podpowiedzi jak problem można rozwiązać lub na co zwrócić uwagę.
Poniżej zamieszczę też kod metody call_MAP(x, y):
QRgb codec::call_MAP(int w, int h)
{
int r, g, b;
QRgb pixel_val, pixel_val_1, pixel_val_2, pixel_val_3;
//======================P(x)
pixel_val=picture.pixel(w,h);
pixel_val_1=picture.pixel(w-1, h);
pixel_val_2=picture.pixel(w,h-1);
pixel_val_3=picture.pixel(w-1,h-1);
//=======================================================================R
if (qMax(qRed(pixel_val_1), qRed(pixel_val_2))<=qRed(pixel_val_3))
{
r=qMin(qRed(pixel_val_1), qRed(pixel_val_2));
}
else if (qMin(qRed(pixel_val_1), qRed(pixel_val_2))>=qRed(pixel_val_3))
{
r=qMax(qRed(pixel_val_1), qRed(pixel_val_2));
}
else
{
r=qRed(pixel_val_1)+qRed(pixel_val_2)-qRed(pixel_val_3);
}
//=======================================================================G
if (qMax(qGreen(pixel_val_1), qGreen(pixel_val_2))<=qGreen(pixel_val_3))
{
g=qMin(qGreen(pixel_val_1), qGreen(pixel_val_2));
}
else if (qMin(qGreen(pixel_val_1), qGreen(pixel_val_2))>=qGreen(pixel_val_3))
{
g=qMax(qGreen(pixel_val_1), qGreen(pixel_val_2));
}
else
{
g=qGreen(pixel_val_1)+qGreen(pixel_val_2)-qGreen(pixel_val_3);
}
//=======================================================================B
if (qMax(qBlue(pixel_val_1), qBlue(pixel_val_2))<=qBlue(pixel_val_3))
{
b=qMin(qBlue(pixel_val_1), qBlue(pixel_val_2));
}
else if (qMin(qBlue(pixel_val_1), qBlue(pixel_val_2))>=qBlue(pixel_val_3))
{
b=qMax(qBlue(pixel_val_1), qBlue(pixel_val_2));
}
else
{
b=qBlue(pixel_val_1)+qBlue(pixel_val_2)-qBlue(pixel_val_3);
}
pixel_val=qRgb(r, g, b);
return pixel_val;
}