擴展SDL表面的正確方法是什麼?我在網上找到了一個解釋,但它需要重新繪製像素逐個像素。似乎應該有某種方式通過SDL本地執行此操作,而不是像那樣重新繪製映像。我無法在涵蓋此內容的SDL文檔中找到任何內容。我可以通過修改曲面的寬度和高度來調整曲面的大小,但是曲面會被剪切。合適的方式來縮放SDL曲面而不剪切?
8
A
回答
7
SDL不支持縮放blitting。據SDL_BlitSurface文檔:
注:SDL阻擊器不(還) 具有縮放圖混合表面向上或向下喜歡它 與其它更復雜 塊傳輸機制的情況下 的能力。如果您想要縮放圖像 (例如,使用 SDL_gfx),您必須自行提供 數字。
你可以找到SDL_gfx here。編寫自己的blitting函數並不是那麼糟糕,它可能是一個有趣且有用的學習實驗(儘管你會重新發明輪子)。使用OpenGL也是一種選擇,因爲縮放和旋轉等功能可以在單個函數調用中完成。
1
爲了完整,並且由於該問題未指定SDL版本,因此可以使用API方法SDL_RenderCopyEx
在SDL2中進行縮放。除了基本的SDL2庫之外,不需要額外的庫。
int SDL_RenderCopyEx(SDL_Renderer* renderer,
SDL_Texture* texture,
const SDL_Rect* srcrect,
const SDL_Rect* dstrect,
const double angle,
const SDL_Point* center,
const SDL_RendererFlip flip)
通過設置的一個dstrect
大小可以縮放紋理像素的整數倍。也可以同時旋轉和翻轉紋理。
從技術上講,這不是縮放表面,而是縮放紋理。該過程應儘可能相關,但在基於SDL2的應用程序中進行渲染之前,表面幾乎總是會轉換爲紋理。
參考:https://wiki.libsdl.org/SDL_RenderCopyEx
像往常一樣創建紋理:
surface = IMG_Load(filePath);
texture = SDL_CreateTextureFromSurface(renderer, surface);
當它的時間來呈現它,呼籲SDL_RenderCopyEx
代替SDL_RenderCopy
4
我知道這個答案是太晚協助提問的人,但我決定寫這個來幫助任何絆倒這個問題的人。在SDL 2.0中,您可以使用SDL_BlitScaled()
函數將表面縮放爲目標SDL_Rect
。有一個LazyFoo的教程描述了這個,或者查看這個documentation。
相關問題
- 1. 縮放以適合剪切圖像
- 2. 縮放方程以適合確切的頁面寬度
- 3. 縮放,裁剪和剪切視頻iPhone
- 4. SDL曲面和BMP
- 5. dompdf - 縮放pdf以適合頁面
- 6. 矩形圖像縮放到適合的方面廣場,MPMediaItemArtwork
- 7. TMUX放大或縮小,而不切換
- 8. 縮放SDL視圖比SDL_gfx縮放表面更快嗎?
- 9. 如何縮放嵌入式Flash視頻而不是裁剪?
- 10. SDL中的縮放精靈
- 11. 縮放QGraphicsItem以適合QGraphicsView
- 12. 縮放以適合算法
- 13. 表適合而不是縮小
- 14. 以編程方式縮放畫布以適合視圖
- 15. SDL曲面返回NULL?
- 16. 需要一種方式來縮放字體,以適應矩形
- 17. 縮放Android ListView而不縮放裏面的內容
- 18. 在縮放和縮小時正在剪切的頁腳
- 19. 如何使z指數適合頁面,而不是縮小
- 20. 如何縮小UIScrollView中的圖像而不剪切它?
- 21. SDL - (硬件)像素縮放
- 22. 縮放iframe以適當地適合
- 23. 適當縮放UIImage使其全屏顯示而不會產生任何扭曲
- 24. 如何在android中以編程方式剪切或修剪音頻歌曲?
- 25. 不縮放DIV元素,而縮放頁面
- 26. 從側面縮放CCSprite而不是從中心縮放
- 27. 這是一個合適的方式來關閉更新頁面?
- 28. 跨瀏覽器的方式來強制SVG適合裏面div
- 29. Android:放大和縮小頁面捲曲
- 30. 縮放畫布不適用於剪輯區域