2010-03-07 46 views
0

我正在爲我的CS課做一個遊戲,我在網上找到的精靈太小了。您如何「拉伸」位圖...使用SDL使它們更大? (我需要增加50%的尺寸,所有尺寸相同。)示例代碼片段將不勝感激。如何在C和SDL中拉伸位圖?

回答

0

您將使用專爲此任務設計的軟件獲得更好的效果。一個不錯的選擇是ImageMagick。它可以從命令行或編程使用。

例如,在命令行中,你只需要輸入:

convert sprite.bmp -resize 150% bigsprite.bmp 

如果出於某種奇怪的原因,你要編寫自己的雙線性縮放,this guy looks like he knows what he is doing.

+0

Thankyou,我非常感謝幫助以及更多信息的鏈接。 – Fobia 2010-03-08 05:29:12

-1

你試過了嗎?

SDL_Rect src, dest; 
    src.x = 0; 
    src.y = 0; 
    src.w = image->w; 
    src.h = image->h; 
    dest.x = 100; 
    dest.y = 100; 
    dest.w = image->w*1.5; 
    dest.h = image->h*1.5; 
    SDL_BlitSurface(image, &src, screen, &dest); 
+0

我很抱歉,但事實並非如此。 – Fobia 2010-03-08 04:58:50

+1

SDL_BlitSurface不能伸展/縮放。 dest的寬度和高度被忽略 – Monkeyget 2010-07-27 14:22:47

-1

使用拉伸無證功能SDL: extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src,SDL_Rect * srcrect, SDL_Surface * dst,SDL_Rect * dstrect);

喜歡:

SDL_SoftStretch(圖像,& SRC,屏幕,&目標寄存器);

+1

格式化您的答案 – NoNaMe 2012-12-12 04:27:09

+0

該函數實際上並不存在。 – Caleb1994 2014-09-24 04:23:47

1

此問題未指定SDL版本,即使SDL2在寫入問題時不可用,SDL2答案也會在此處添加完整性。

與SDL1.2不同,可以使用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的大小,可以將紋理縮放爲整數個像素。也可以同時旋轉和翻轉紋理。

參考:https://wiki.libsdl.org/SDL_RenderCopyEx

像往常一樣創建紋理:

surface = IMG_Load(filePath); 
texture = SDL_CreateTextureFromSurface(renderer, surface); 

當它的時間來呈現它,調用SDL_RenderCopyEx代替SDL_RenderCopy