2012-10-30 42 views
1

我正努力將二進制數據轉換爲gtk.gdk.pixbuf從二進制數據創建一個gtk.gdk.Pixbuf

這應該照亮我的問題:

file = open("image.jpg", "rb") 
//Ultimately this is going to come from a BLOB 
binary = f.read() 
//I created a pixbuf directly from the jpg 
//and took the rowstride values &c. from that 
pixbuf = gtk.gdk.pixbuf_new_from_data(
    binary, gtk.gdk.COLORSPACE_RGB, False, 8 , 450, 640, 1352) 

這種失敗:

ValueError: data length (90825) is less then required by the other parameters (865280)

我目前的解決方法是將二進制數據寫入一個文件,然後從該文件中創建一個Pixbuf 。這只是感覺很不好。我正在從數據庫讀取二進制數據,所以我真的需要一個可以直接從緩衝區創建pixbuf的解決方案。

我不明白爲什麼它很容易,如果我只是從數據庫中讀取的BLOB,並將其寫入到一個文件 - 然後加載該文件作爲一個pixbuf的,但很難從緩衝區直接去!

我在做什麼錯?

回答

5

您正在嘗試使用方法made for RGB-data only來處理jpg數據。

如果你要處理的JPG文件,使用加載這個格式,建議here

file = open("image.jpg", "rb") 
binary = file.read() 
loader = gtk.gdk.PixbufLoader("jpeg") 
loader.write(binary) 
loader.close() 
pixbuf = loader.get_pixbuf() 

現在pixbuf包含,你需要什麼。您的解決方法used such a loader automatically

+0

輝煌,謝謝 – jsj