Seite 1 von 1

Bilddaten -> win32 clipboard / zwischenablage

Verfasst: Freitag 3. Oktober 2008, 21:00
von arghargh
Ich suche eine Möglichkeit, mit PIL erzeugte Bilddaten in die Windows-Zwischenablage zu bekommen, und zwar aus einem Konsolenprogramm.

Zu http://sourceforge.net/projects/pywin32/ finde ich an Doku nur
http://docs.activestate.com/activepytho ... board.html

Hmm, hier sind im Zusammenhang Bildformate erwähnt:

http://code.google.com/p/enso/source/br ... e.py?r=133

Und hier evtl. sogar die Lösung, allerdings kann ich kein Japanisch (Pythonisch auch nicht richtig):

http://d.hatena.ne.jp/ousttrue/20080125/1201280065

Vielleicht mit dem kombiniert:
http://www.pythonware.com/library/pil/h ... agewin.htm

Das probiere ich morgen mal aus.

Verfasst: Freitag 3. Oktober 2008, 21:20
von arghargh

Code: Alles auswählen

    win32clipboard.SetClipboardData(win32clipboard.CF_DIB, ImageWin.Dib(im))
TypeError: The object must support the buffer interfaces
Das ist mir leider zu hoch.

Andernfalls ist mir auch mit einem programm geholfen, dass eine bilddatei oder daten über pipe in die zwischenablage schreibt.

für powershell gibt es da wohl hilfreiche user-extensions, aber das hat nicht jeder.

Verfasst: Freitag 3. Oktober 2008, 21:40
von HWK
Dieser Code speichert zumindest etwas im Clipboard. Es kann aber von den gängigen Grafikprogrammen nicht gelesen werden.

Code: Alles auswählen

import Image, ImageWin
import win32clipboard
im = Image.open(dein_bild)
win32clipboard.OpenClipboard(0)
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_BITMAP, ImageWin.Dib(im).tostring())
win32clipboard.CloseClipboard()
Auch das speichern von BMP- oder TIFF-Dateien hat nicht weitergeholfen.
MfG
HWK

Verfasst: Samstag 4. Oktober 2008, 00:15
von HWK
So funktioniert es:

Code: Alles auswählen

import cStringIO
import Image
import win32clipboard, win32ui
im = Image.open(dein_bild)
f = cStringIO.StringIO()
im.save(f, 'BMP')
f.seek(0)
bmp = win32ui.CreateBitmap()
bmp.LoadBitmapFile(f)
f.close()
win32clipboard.OpenClipboard(0)
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_BITMAP, bmp.GetHandle())
win32clipboard.CloseClipboard()
MfG
HWK

Verfasst: Samstag 4. Oktober 2008, 09:30
von arghargh
Super, danke!