ich will eine Klasse schreiben, die von QImage abgeleitet ist und die einen "+"-Operator hat. Dieser soll ein Bild erweitern und zwar so, dass rechts neben dem alten das neue direkt angefügt wird. Gleiche Höhe der beiden Bilder ist Voraussetzung.
Soweit bin ich momentan:
Code: Alles auswählen
class myImage : public QImage
{
public:
myImage();
myImage(int width, int height, Format format);
myImage operator+ (myImage &rechts);
};Code: Alles auswählen
myImage::myImage()
{}
myImage::myImage(int w, int h, Format f)
: QImage(w, h, f)
{}
myImage myImage::operator+ (myImage &rhs)
{
if(height() != rhs.height())
{
qDebug() << "myImage operator+ : height != rhs.height!";
return *this;
}
myImage erg(
width() + rhs.width(),
height(),
QImage::Format_ARGB32
);
int i;
for(i=0; i < height(); ++i)
{
QRgb* thisPtr = (QRgb*) scanLine(i);
QRgb* ergPtr = (QRgb*)erg.scanLine(i);
QRgb* rhsPtr = (QRgb*)rhs.scanLine(i); // nur korrekt mit i-1
// eine Zeile kopieren
int j;
for(j=0; j < width(); ++j) // zuerst die Daten links
ergPtr[j] = thisPtr[j];
for(; j < width() + rhs.width(); ++j) // dann rechts
ergPtr[j] = rhsPtr[j];
}
return erg;
}
int main(int argc, char** argv)
{
QApplication app(argc, argv);
myImage img1, img2;
if(!(img1.load("./1.png") && img2.load("./2.png")))
{
qDebug() << "konnte keine Bilder laden!";
exit(1);
}
qDebug() << "img1.width():" << img1.width() << "img1.height():" << img1.height();
qDebug() << "img2.width():" << img2.width() << "img2.height():" << img2.height();
myImage tmp = img1 + img2;
bool success = tmp.save("neu.png");
qDebug() << success;
return 0;//app.exec();
}Ich versteh's einfach nicht. Die Qt-Doku sagt auch, dass der Index bei scanLine() bei 0 beginnt, wie kann es dann mit -1 (i ist zuerst 0) überhaupt funktionieren? Und wieso gerade beim rechten Bild und beim linken nicht?
Ich benutze Qt 4.2.0 unter Windows mit dem MingW-Compiler.