将透明 .PNG 图像传输到屏幕上
你好,我有一个图像,上面画了一个黑色矩形,它的背景是透明的。该文件保存为 png (clear.png
)。然后我有另一个图像,它只是保存为 jpeg 的纯红色背景(background.jpeg
)。我试图做的是使clear.png 中的黑色矩形显示在纯红色背景图像的顶部。
这就是我所做的..
/*Transparent image*/
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <iostream>
using namespace std;
int main(int argc,char *argv[]){
SDL_Surface *screen = NULL;
SDL_Surface *background = NULL;
SDL_Surface *transparentimage = NULL;
if ( SDL_Init(SDL_INIT_EVERYTHING) == -1){
cout <<"could not start sdl" << endl;
}
screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
if ( screen == NULL){
cout<<"could not create the screen" << endl;
}
background = IMG_Load("background.jpeg");
if ( background == NULL){
cout<<"could not load background" << endl;
}
transparentimage = IMG_Load("clear.png");
if ( transparentimage == NULL){
cout<< "could not load transparentimage" << endl;
}
if ( SDL_BlitSurface(background,NULL,screen,NULL) == -1 ){
cout<<"Couldnt do background blitting " << endl;
}
if (SDL_BlitSurface(transparentimage,NULL,background,NULL) == -1 ){
cout<<"could not do clear image blitting "<< endl;
}
SDL_Flip(screen);
SDL_Delay(5000);
SDL_FreeSurface(background);
SDL_FreeSurface(transparentimage);
SDL_Quit();
return 0;
}
上面的方法不起作用,它只是向我显示了一个带有红色背景和屏幕底部黑色页脚的屏幕(这不是我的矩形:))。我在这里做错了什么?图像的尺寸也是相同的 (640x480)。
Hi there I have a image with a black rectangle drawn on it, and its background is transparent. This file is saved as a png (clear.png
). Then I have another image which is just a solid red background saved as a jpeg (background.jpeg
). What I was trying to do is make so that the black rectangle in clear.png show up on top of the solid red background image.
This is what I have done..
/*Transparent image*/
#include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <iostream>
using namespace std;
int main(int argc,char *argv[]){
SDL_Surface *screen = NULL;
SDL_Surface *background = NULL;
SDL_Surface *transparentimage = NULL;
if ( SDL_Init(SDL_INIT_EVERYTHING) == -1){
cout <<"could not start sdl" << endl;
}
screen = SDL_SetVideoMode(640,480,32,SDL_SWSURFACE);
if ( screen == NULL){
cout<<"could not create the screen" << endl;
}
background = IMG_Load("background.jpeg");
if ( background == NULL){
cout<<"could not load background" << endl;
}
transparentimage = IMG_Load("clear.png");
if ( transparentimage == NULL){
cout<< "could not load transparentimage" << endl;
}
if ( SDL_BlitSurface(background,NULL,screen,NULL) == -1 ){
cout<<"Couldnt do background blitting " << endl;
}
if (SDL_BlitSurface(transparentimage,NULL,background,NULL) == -1 ){
cout<<"could not do clear image blitting "<< endl;
}
SDL_Flip(screen);
SDL_Delay(5000);
SDL_FreeSurface(background);
SDL_FreeSurface(transparentimage);
SDL_Quit();
return 0;
}
The above doesn't work and it just shows me a screen with a red background and a black footer at the bottom of the screen (this isn't my rectangle :)). What have I done wrong here?. Also the size of the images are identical (640x480).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
确保初始化
SDL_image
并将两个位图传输到屏幕:Make sure to init
SDL_image
and blit both bitmaps to the screen: