Hallo,
meine Anwendung kann bereits Bilder laden. Ich würde gern auf einzelne Pixel des Bildes zugreifen. Ich glaube/weiß dass dafür Zugriffe über QT gibt aber ich bin mir unsicher ob diese auch effizient/schnell sind? Gibt es sonst eine andere Möglichkeit überhaupt auf Pixel zuzugreifen (vielleicht auch was anderes als OpenGL?). Oder muss man da irgendwie auf os-funktionen zurückgreifen...wenn ja: ist diese Methodik überhaupt schneller als über QT ?
Ich weiß nicht ob sich jemand auskennt aber ich würde gerne Bilder "stören" also ein Blurring darauf anwenden...wenn jemand erfahrung hat...
Oder auch einfacher...wenn ich einen Gaußfilter implementieren wollen würde...im Grunde muss ich die neuen Pixeldaten nur über eine Gewichtung von Nachbarpixeln errechen....d.h. ich operiere doch mit den RGB-werten also nur den Farbwerten oder? Was anderes kann es doch nicht sein oder?
Oder wie soll ich Pixel sonst verrauschen lassen?
Danke für jede Info!
Schnelle/Effiziente Pixeloperationen
Ich weiss leider nicht, wie es in Deinem Code aussieht, aber vor langer Zeit (das sage ich nur für den Fall, dass irgendwas mit meinem Code nicht mehr so kompiliert
) hatte ich das gelöst, indem ich ein QFrame abgeleitet und eine extra QPixmap mit meinen Daten eingeführt hatte. Keine Ahnung, ob man das heute auch noch so macht:
Implementierung:
Ansonsten schaue ich mir bei Ideenlosigkeit immer die Qt-Beispiele an. Auch die Quelltexte von Qt/KDE-Programmen mit ähnlichen Funktionen sind oft brauchbar.
MfG, E*
PS: Der Quelltext stammt aus Fractalia, einem sehr alten Mandelbrot/Fraktal-Anzeiger.
Code: Alles auswählen
class Canvas : public QFrame
{
Q_OBJECT
public:
Canvas (QWidget *parent=0, const char *name=0);
virtual ~Canvas ();
void paintEvent (QPaintEvent *);
void resizeEvent (QResizeEvent *);
void SetPixel (int x, int y, int color);
protected:
QPixmap *m_pixmap;
};
Code: Alles auswählen
Canvas :: Canvas (QWidget *parent, const char *name)
: QFrame(parent, name)
{
setBackgroundColor(white);
m_pixmap = new QPixmap(width(), height(), -1);
}
Canvas :: ~Canvas ()
{
if (m_pixmap) delete m_pixmap;
}
void Canvas :: paintEvent (QPaintEvent *)
{
QPainter paint;
paint.begin(this);
paint.drawPixmap(0, 0, *m_pixmap);
paint.end();
}
void Canvas :: resizeEvent (QResizeEvent *)
{
m_pixmap->resize(width(), height());
m_pixmap->fill(white);
}
void Canvas :: SetPixel (int x, int y, int color)
{
QPainter paint(m_pixmap);
// Hier hatte ich die Farbe als RGB aus 'color' bestimmt.
// Also anpassen. Ggf. die Farbwerte einfach übergeben.
paint.setPen(QColor((int) r, (int) g, (int) b));
paint.drawPoint(x, y);
paint.end();
}
MfG, E*
PS: Der Quelltext stammt aus Fractalia, einem sehr alten Mandelbrot/Fraktal-Anzeiger.