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;
}
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