Seite 1 von 1

alpha transparent - pixel auf pixel alpha wert behalten

Verfasst: 5. März 2011 15:33
von mentizm
Hallo,

ich habe folgendes problem ich habe ein PAINTEVENT, lade ein QPixmap und male darauf rum.

painter.setPen( QPen( QColor( 255, 0, 0, "60"), 50) );
painter.drawPoint( x, y );

habe einen mousMoveEvent, ich will nämlich bei gedrückter maustaste "wie bei MS PAINT" ein wenig auf meinem QPixmap rummalen.

Das klappt auch alles ... nun zu meinem Problem:

Wenn sich die linien kreuzen, habe ich an der stelle keine TRANSPARENT="60" sondern QT addiert die werte, so dass die stelle undurchsichtiger wird.

Gibt es eine Möglichkeit das zu umgehen? ich möchte gerne, wenn ich mit meinen stifft 100 mal über den gleichen Punkt fahre, dass die transparenz trotzdem "60" bleibt!

gruß mentizm

Verfasst: 5. März 2011 16:01
von upsala
Das ist doch auch das normalerweise erwartete Verhalten.

Ansonsten könntest du noch ein bischen mit QPainter::CompositionMode herumspielen.

rückgängig machen...

Verfasst: 8. April 2011 18:52
von mentizm
hallo brauche dringend hilfe, ich dreh noch durch.

habe das problem oben gelöst bekommen, d.h. ich habe das addieren des alpha wertes umgehen können.

nun habe ich ein neues problem ... REVERSE ... ich habe ein qimage, wo ich linen drauf male.

die linien habe eine alpha-transparenz. d.h linie kreuzt line ... schnittpunkt wird dunkler (oder die transparenz nimmt ab).

ABER MEIN PROG MACHT ES NICHT MEHR ... er malt lienen aber ohne den alpha wert, dem ich ihm gegeben habe. ich dreh noch durch ... son hin und her mit dem mist.

bitte um hilfe was ich da falsch mache ... code kommt!

Verfasst: 8. April 2011 18:58
von mentizm

Code: Alles auswählen

VisualParallelCoordinates::VisualParallelCoordinates(QWidget *parent) : QWidget(parent)
{
        //setBackgroundRole(QPalette::Base);

        //set QImages:
        pcLayer = QImage( widthPc+1, heightPc+1, QImage::Format_ARGB32);
        cleanImg = QImage( widthPc+1, heightPc+1, QImage::Format_ARGB32);
        brushImg = cleanImg.copy( 0, 0, widthPc+1, heightPc+1 );
        lineLayer = cleanImg.copy( 0, 0, widthPc+1, heightPc+1 );

	// set Colors:
	pcPenColor = qRgba( 0,0,0,50 );

	// set Pens:
	pcPen.setWidth( 2 );
	pcPen.setColor( pcPenColor );

}


void VisualParallelCoordinates::paintEvent(QPaintEvent *event)
{
	QPainter pcLayerPainter( this );
	pcLayerPainter.setPen( pcPen );
	pcLayerPainter.drawImage( 0, 0, pcLayer );
	//drawPcLayer( pcLayerPainter );

	pcLayerPainter.drawLine( 100, 200 , 200, 200 );
	pcLayerPainter.drawLine( 150, 150 , 300, 150 );
	pcLayerPainter.drawLine( 300, 400 , 150, 250 );
	pcLayerPainter.drawLine( 10, 500 , 450, 50 );

}