QImage NUR Eine verticale Linie neu zeichnen

Alles rund um die Programmierung mit Qt
Antworten
Martin_1961
Beiträge: 22
Registriert: 1. Juni 2011 13:23

QImage NUR Eine verticale Linie neu zeichnen

Beitrag von Martin_1961 »

Hallo,
ich möchte in einem QImage nur eine vertikale Linie ändern und neu Zeichnen.
und bin folgend vorgegangen.
das ganze soll nach einem FIFO Prinzip funktionieren.
wenn der Wischer am Ende des Bildes angekommen ist, fängt wieder von Vorne an.

Code: Alles auswählen

void Spectogram::AddLine(float *ColorData,int colordata_size)
{
m_CurrentScanline++;
m_CurrentScanline = m_CurrentScanline < myImage.width() ? m_CurrentScanline:0;
    uchar* p         = myImage.bits();         // Bits Pointer...
    int BytesPerLine = myImage.bytesPerLine();
    if(BytesPerLine <=0)
       return;
    int l = (spgImag.height()-1) < colordata_size ? spgImag.height()-1 : colordata_size;
    for(int i = 0;i<l;i++)
    {
        index = (height() - 1 - i)*BytesPerLine +m_CurrentScanline;
        p[index] =(uchar)ColorData[i];
    }
    int x = m_CurrentScanline;
    int y = this->height();
    QRect r = QRect(x,0,x+1,y);
    //update();
    repaint(r); 
   //update(r);
}

void myImageClass::paintEvent(QPaintEvent *event)
{
if(!this->isVisible())
        return;
    if(this->width() <= 0 || this->height()<= 0)
       return;
    if(m_CurrentScanline ==  m_Previousline)
        return;
 QPainter painter(this);
     int h = this->height();
     int x = m_CurrentScanline;
     QRectF target(x, 0, x+1, -1);
     QRectF source(x, 0, x+1, -1);
     painter.drawImage(target, myImage, source);
    m_Previousline = m_CurrentScanline;
}
das funktioniert, aber nicht richtig.
die manipulierte Linie wird gezeichnet, aber ein Großteil des Images wird auch neu gezeichnet. und zwar ( vor dem zu zeichnenden Linie !! Also ältere Linien)


ich vermute, dass ich die Bereiche nicht richtig zuweise. komme aber nicht darauf, wo der Fehler ist.

Grüße
Martin
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QImage NUR Eine verticale Linie neu zeichnen

Beitrag von Christian81 »

Zum Zeichnen einer Linie benutze ich QPainter::drawLine().
Was soll das ganze überhaupt werden? Zu wenig Infos...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten