我正在尝试加载我从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根据闪光输出选项
答案 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%。