看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) linux gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) gtk+ 我現在想用gtk+ 顯示一張圖, 然後改變窗口大小時 圖像大小也會隨窗口大小改變 我嘗試用 gtk_signal_connect 的 "expose-event" 與"size_request" 都不盡理想 用expose-event 會只能拉大不能拉小 用size_request 更慘 不但只能拉大不能拉小 在拉伸過程還超lag 程式碼如下: http://codepad.org/n8nLPTNz 假設程式碼檔名叫 winresize.cpp 編譯則是: g++ `pkg-config --libs --cflags gtk+-2.0` -fpermissive winresize.cpp -o winresize 解釋一下: function readBMP 用來讀bmp檔的函數 我丟進去的圖是叫 dragonAge_640x480.bmp ( 這張 http://0rz.tw/8EGNv) flag INVERSE 是指明bmp由前向後還是由後向前 這裡是後向前 176~ 186 行 標準的gtk顯示圖像做法, 圖像資料在記憶體 unsigned char *pImageData 中 flag EXPOSE_EVENT: 開啟是用 "expose-event" 事件來觸發改變圖像 沒開啟則是用"size_request" 觸發 87~161 則是寫了兩個 callback 函數ResizeImage 去對應是否 flag EXPOSE_EVENT 有無開啟 這code寫的有點亂 因為怎試都不行 0.0 還請高手釋疑 謝謝 總覺的該不難 但怎都弄不出來.. 當然最好是用size_request 來觸發比較好嚕 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 58.115.132.79 ※ 編輯: DrStein 來自: 58.115.132.79 (06/26 01:18)
Bencrie:反了吧 ... size request才是設定最小大小 XD 06/26 10:46
那請問我該怎寫才對呢 還請大大幫忙給予指點 謝謝 ※ 編輯: DrStein 來自: 58.115.132.79 (06/26 14:13)
Bencrie:GTK+ 的影像處理我不熟 XD 是我的話可能會考慮用 OpenGL 06/26 16:20
Bencrie:來做縮放 06/26 16:21
Bencrie:不過這樣缺點就是只能用 linear filter 06/26 16:24
Bencrie:網路上有人做法是拖曳時用 Nearest,放開後用 Hyper 06/26 16:25
※ 編輯: DrStein 來自: 58.115.132.79 (06/26 17:03)
DrStein:現在只是先做個sandbox來試 等到真的要用時會用lib令外做 06/26 17:04
DrStein:縮放,現在主要是卡在回傳(resize)事件與重設pixbuf 06/26 17:05
DrStein:那請問能給與建義嗎 謝謝 能縮放就好了qq 06/26 17:06
Bencrie:你去抓 gpicview 的 code 來看比較快 06/26 22:30
DrStein:那請用那一個事件回傳比較好呢 06/26 23:39