SDL加载我的图像搞砸了

时间:2011-12-20 22:08:41

标签: c++ image-processing sdl

我正在尝试加载我从Flash CS3导出的图像,它是一张非常可爱的脸但加载非常奇怪,它以蓝色方式加载这是两个文件的代码:

//main.cpp 

#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include "test.hpp"



int main(int argc, char *argv[])
{




SDL_Init(SDL_INIT_VIDEO);

// Activamos modo de video
screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE | SDL_DOUBLEBUF);

    image = IMG_Load("face.bmp");

    dest.x = 200;
    dest.y = 200;


//Main Loop
while(Abierto)
{
    //We Draw
    Draw();

    //Events
    while( SDL_PollEvent(&event))
    {
        if(event.type == SDL_QUIT)
            Abierto = false;
            }


}


// We free the image
SDL_FreeSurface(image);

SDL_Quit();

return 0;
}

现在另一个;

//test.hpp

DL_Surface *image = NULL, *screen = NULL;
SDL_Rect dest;
SDL_Event event;

bool Abierto = true;
float PlaneX = 300, PlaneY = 200;
float velX = 0.1, velY = 0.1;


void Draw()
{
Uint32 color;



// Black Background is created
color = SDL_MapRGB (screen -> format, 0, 0, 0);
SDL_FillRect (screen, NULL, color);
SDL_DisplayFormatAlpha(image);


SDL_BlitSurface(image, NULL, screen, &dest);

// Flip the working image buffer with the screen buffer
SDL_Flip (screen);


}

我需要这方面的帮助请尽管我没有SDL的经验哦,如果你想仔细看看我上传了项目here

哦,我的坏,我必须添加图像是32像素与alpha根据闪光输出选项

1 个答案:

答案 0 :(得分:2)

根据文档,SDL_DisplayFormatAlpha会返回一个新图像并保持原始图像不变。

因此,在加载图像时尝试第一部分:

SDL_Surface *origImage = IMG_Load("face.bmp");
image = SDL_DisplayFormatAlpha(origImage);
SDL_FreeSurface(origImage)

因为无需每帧调用SDL_DisplayFormatAlpha

然后在第二部分,只是blit image,而不是调用SDL_DisplayFormatAlpha

更新

我刚检查了你的照片,看起来它是一个奇怪的 bmp。我以前见过这样的:BMP格式是如此混乱,如果你不遵守基础,那么不同的程序将会以不同的方式解释数据。

在你的情况下:

  • display face.bmp显示正确。
  • gthumb face.bmp没有显示任何内容。
  • eog face.bmp说“虚假标题数据”。

我强烈建议您为所有类似游戏的照片使用PNG文件,为所有类似照片的照片使用JPG。

所以运行

$ convert face.bmp face.png

并使用PNG文件。我会更好地工作,你的文件大小将比原版大20%。