2011年5月29日 星期日

圖片的鏡射處理

鏡射應該是遊戲設計裡常會用到的方法。

但是很遺憾,SDL似乎是沒有這個方法…

沒有這個方法的話就自己寫一個吧。

相較於降低品質,鏡射容易多了,所以同樣的事我也不做贅述。

依然是只有PNG和BMP
/** 
* Srite :類型-(SDL_Surface *)SDL圖片底層Struct,對像圖片(想轉成BMP的圖) 
* type :只有PNG或不是PNG兩種,有興趣的在自己擴充吧
*/
SDL_Surface* Sprite_Convey2Mirror( SDL_Surface* Sprite ,string type)
{
    SDL_Surface* Mirror;
    if ( type == "PNG" )
        Mirror = SDL_DisplayFormatAlpha( Sprite );
    else
        Mirror = SDL_DisplayFormat( Sprite );

    SDL_Color rgb1;

    Uint32 rgb3;

    #pragma omp parallel for
    for ( int j = 0;j < Mirror ->h - 1;++j )
    {
        for ( int i = 0;i < Mirror ->w - 1;++i )
        {
            rgb1 = GetRGB( Sprite, i, j );

            if ( type == "PNG" )
            rgb3 = SDL_MapRGBA( Sprite ->format, rgb1.r, rgb1.g, rgb1.b, rgb1.unused ); //取得目標顏色RGBA,包含alpha
            else
            rgb3 = SDL_MapRGB( Sprite ->format, rgb1.r, rgb1.g, rgb1.b );//取得目標顏色,不包含alpha

            putpixel( Mirror, Sprite ->w - i, j, rgb3 ); //這裡就是整個Function的重點,反方向把顏色撲回去,這個函式之後我再解釋
        }
    }
    return Mirror;
}

沒有留言:

張貼留言