QPicture schneiden?

Alles rund um die Programmierung mit Qt
Antworten
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

QPicture schneiden?

Beitrag von Whitefurrows »

Hallo,

wenn ich ein QPicture(z.b. Höhe 500 x Breite 250) habe, wie kann ich dieses zuschneiden, damit ich ein neues QPicture habe(z.B. Höhe 250 x Breite 250). Die neue Höhe muss von unten gemessen werden, da das Original QPicture in der Höhe variieren kann und ich brauche immer den unteren Teil von z.B. 250.

Gruß

Whitefurrows
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

du kannst versuchen, mit QPainter:setClipRect(...) zu arbeiten
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Hallo,

danke für den Tipp. So habe ich es versucht:

Code: Alles auswählen

QPainter p;
QPicture pic;
QRect cut;

pic.load("c:\\pic.png");
cut.setRect(0, pic.height()-250 ,250,250);

p.begin(&pic);
p.setClipRect(cut);
p.end();

pic.save("c:\\pic2.png")
Leider funktioniert es nicht, kannst du mir helfen?

Gruß

Whitefurrows
Esleborn
Beiträge: 265
Registriert: 27. Januar 2005 01:23
Wohnort: Baden-Würtenberg
Kontaktdaten:

Beitrag von Esleborn »

ähm ich hab eigentlich keine Ahnung davon, aber könnte es sein, dass du
den Painter zwar als abgeschnitten zu zeichnen definierst, aber erstens vergisst das Bild zu zeichnen und zweitens wenn du zeichnen würdest, der Rest immernoch da wäre, da du ihn ja nicht verworfen hast?

Probier mal:

Code: Alles auswählen

QPicture pic;
QPicture target;

pic.load("c:/pic.png");

if ( !pic.isNull ( ) )
{
   QRect cut ( 0, pic.height()-250 ,250,250);
   QPainter painter ( &target );
   painter.setClipRect(cut);
   painter.drawPicture(0, 0, pic);
   painter.end();
}

target.save("c:/pic2.png")
Elgrimm Esleborn
Glaube an eine Lösung, nur dann kannst du auch eine finden.
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Ja, das hört sich gut an, aber leider funktioniert es so auch nicht? Ist vielleicht jemand da der sich damit auskennt, sollte eigentlich nicht so schwer sein!?

Gruß

Whitefurrows
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Also, das hier funktioniert:

Code: Alles auswählen

#include <QtGui>

int main(int argc, char *argv[])
{
	QApplication app(argc, argv);

	QPicture pic1;
	
	QPainter p;
	p.begin(&pic1);
	p.setPen(QColor(0, 0, 255));
	p.setBrush(QColor(0, 128, 0));
	p.drawEllipse(0, 0, 100, 100);
	p.end();
	
	QPicture pic2;
	p.begin(&pic2);
	p.setClipRect(0, 0, 50, 50);
	p.drawPicture(0, 0, pic1);
	p.end();
	
	QLabel *label=new QLabel(0);
	label->show();
	label->setPicture(pic2);
	
	
	return app.exec();
}
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Hallo,

danke für den Tipp, funktioniert super. Allerdings verstehe ich nicht warum er mit target.save("c:/pic2.png") das Bild nicht speichert. Ebenso lädt er mir das Bild nicht mit pic.load("c:/pic.png");

Hat jemand evtl. eine Erklärung dafür?

Gruß

Whitefurrows
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Weil wir hier keine Pixel- sondern Vektordaten haben und somit png nicht als Grafikformat sinnvoll ist.
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Wie kann ich dann eine Pixel-Grafik landen und eine Vektor-Grafik als Pixel-Grafik speichern?

Gruß

Whitefurrows
Antworten