使用GTK + 3.6我想從內存中的緩衝區顯示圖像,而不是磁盤上的文件。我有一個const char *data
與圖像數據,我試圖從它創建一個GTK圖像。 到目前爲止,我嘗試了兩種我認爲可以工作的方法。兩者都使用GdkPixbuf,因此要求圖像數據爲guchar* (unsigned char*)
。Gdk pixbuf從內存加載圖像
這一要求我必須投中的數據:
guchar *gudata = reinterpret_cast<guchar*>(const_cast<char*>(data));
然後我嘗試了以下內容:
的數據寫入GdkPixbufLoader與
gdk_pixbuf_loader_write
。在這裏,我得到一個錯誤"Unrecognized image file format"
或者如果我創建一個特定類型(JPG)的加載器,我得到一個錯誤,說它不是一個JPG文件格式(它是,下面解釋)。編輯:代碼位:
guchar *gudata = reinterpret_cast<guchar*>(const_cast<char*>(data)); int stride = ((1056 * 32 + 31) & ~31)/8; GdkPixbufLoader *loader = gdk_pixbuf_loader_new(); GError *error = NULL; if(!gdk_pixbuf_loader_write(loader, gudata, data_size, &error) { printf("Error:\n%s\n", error->message); }
編輯2013年3月1日:從寫功能 刪除步幅參數 - 印刷錯誤。
開羅表面不起作用。顯示黑屏和噪音。
初始化與
gdk_pixbuf_new_from_data
的pixbuf的,然後將圖像看起來就像電視噪音,這表明要麼該數據是錯誤的(並已投),或者其他參數是錯誤的(圖像的行了事,但是不是 :) )。
後,我只是想將數據寫入到使用ofstream
文件foo.jpg
錯誤,是的,我得到一個正常的圖像文件。終端中的file
命令確認它是一個JPEG圖像,並且通過一段簡單的代碼塊,我從該foo.jpg創建了一個GdkPixbuf,以檢查它的行跨度值,並且它與我傳遞給上述函數的值相匹配。
圖像數據是否成爲腐敗跟投,如果是這樣我怎麼能解決?我在const char*
中獲取圖像數據。我看過QtPixmap,它也加載unsigned char*
。
我需要使用單獨的庫嗎? (libjpeg?) 我已安裝libgtk3-dev。
謝謝!
我跑'GDK-pixbuf的查詢,loaders'和JPEG安裝。另外,我將編輯該問題以包含一些代碼。 – Matekk
爲什麼不使用gdk_pixbuf_new_from_stream和GMemoryInputStream? – ergosys
不幸的是,我得到「無法識別的圖像文件格式」。再次,如果我只是將相同的數據流寫入文件,會導致正常工作的.jpg圖像。 – Matekk