Seite 1 von 1
[gelöst] Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 13:42
von Kegelkugel
Hallo,
ich verwende PyQt4, um mit einem Pythonskript Screenshots zu machen. Damit das Programm aber schneller läuft, möchte ich die Bilder nur im RAM abspeichern (statt auf der Festplatte) und gleich auswerten. Kann mir jemand bei meinem Problem helfen?
Vielen Dank für eine SCHNELLE Antwort.
MfG
Kegelkugel
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 13:45
von Hyperion
Kegelkugel hat geschrieben:Hallo,
ich verwende PyQt4, um mit einem Pythonskript Screenshots zu machen. Damit das Programm aber schneller läuft, möchte ich die Bilder nur im RAM abspeichern (statt auf der Festplatte) und gleich auswerten. Kann mir jemand bei meinem Problem helfen?
Falsches Forum! Wir haben ein eigenes PyQt-Unterforum
Du bist ein wenig unpräzise! Ein Screenshot wird ja nicht einfach auf Platte gespeichert, sondern liegt - so weit wie ich mir das vorstellen kann - doch eh im "RAM" vor. Also verstehe ich bisher Dein Problem nicht! Vielleicht schilderst Du das ganze mal ein wenig detaillierter und ggf. auch mit Code bzw. Code-Schnipseln?
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 13:57
von Kegelkugel
Ok.
Warum ich das nicht ins PyQt-Forum gestellt habe?
Es ist mir im Prinzip egal, welches Modul ich am Ende verwende. PyQt verwende ich nur derzeit.
Wenn aber ein Moderator meint, kann er das Thema gerne verschieben.
EDIT: Oh, wurde schon verschoben!
Mein Skript sieht zur Zeit so aus:
import sys
from PyQt4.QtGui import QPixmap, QApplication
app = QApplication(sys.argv)
QPixmap.grabWindow(QApplication.desktop().winId()).save("img.png", "png")
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 14:14
von Darii
Wenn du das Bild nicht speichern willst, lass halt das .save(...) weg.
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 14:48
von Kegelkugel
Geht leider nicht. Ich möchte das Bild dann anschließend so weiterverarbeiten, als hätte ich es aus der Datei geladen.
QPixmap.grabWindow(QApplication.desktop().winId()) ist aber ein <class 'PyQt4.QtGui.QPixmap'> Element.
Damit kann ich, bzw. PIL nichts anfangen.
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 15:00
von Hyperion
Womit kann pil denn etwas anfangen? Es gibt ja nicht nur QPixmap
Zudem kann man Dateien mittels StringIO-Modul simulieren...
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 15:09
von Kegelkugel
Hm, gute Frage.
Mein PIL-Programm lädt per "img = Image.open(sys.argv[1])" das Bild -> type: instance
Übergebe ich aber der Image.open()-Funktion mein QPixmap-Bild kommt: "'QPixmap' object has no attribute 'read'"
Also wäre es z.B. ein Möglichkeit, das QPixmap Bild umzuwandeln, so, dass ich es mit open() laden kann.
Aber da weiß ich auch nicht weiter.
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 15:26
von lunar
@Kegelkugel: "QPixmap" kann man nicht weiterverarbeiten, denn diese Klasse hält Pixeldaten des Grafiksystems der Plattform, auf die Qt direkt keinen Zugriff hat. Folglich musst Du das "QPixmap"-Objekt erst mit ".toImage()" in ein "QImage"-Objekt konvertieren. "QImage"-Objekte bieten alle möglichen Methoden zur Bildverarbeitung.
Falls Du dagegen PIL nutzen möchtest, kannst Du das "QPixmap"-Objekt mittels "QPixmap.save()" und "QtCore.QBuffer" in den Arbeitsspeicher schreiben, und anschließend aus den Inhalten des "QBuffer"-Objekts ein "StringIO"-Objekt erzeugen, welches Du an "Image.open()" übergeben kannst. Alternativ kannst Du auch aus dem "QPixmap"-Objekt wie oben beschrieben ein "QImage"-Objekt erzeugen und dessen interne Pixeldaten an PIL übergeben. Näheres dazu findest Du, wenn Du nach "convert QImage to PIL image" suchst (e.g. auf Google, oder auch direkt in StackOverflow oder ähnlichen Seiten). Ich persönlich würde allerdings davon absehen, da die interne Darstellung von "QImage" weder dokumentiert noch irgendwie garantiert ist.
Das steht im Übrigen so auch alles in der Dokumentation, oder lässt sich über eine Suche im Netz finden.
Re: Screenshots im Arbeistspeicher speichern
Verfasst: Samstag 8. Januar 2011, 18:15
von Kegelkugel
Danke für die Antworten!!!

Ihr habt mir sehr geholfen!
Auf dieser Seite habe ich die Lösung für mein Problem gefunden:
http://stackoverflow.com/questions/1733 ... -pil-image (Antwort 2)