将透明 .PNG 图像传输到屏幕上

2024-02-29

你好,我有一个图像,上面画了一个黑色矩形,它的背景是透明的。该文件保存为 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)。


确保初始化SDL_image并将两个位图传输到屏幕上:

/*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;
    }

    int flags = IMG_INIT_JPG | IMG_INIT_PNG;
    int initted=IMG_Init(flags);
    if( initted & flags != flags) {
        cout<<"could not init SDL_Image" << endl;
        cout<<"Reason: " << IMG_GetError() << endl;
    }

    background = IMG_Load("red.jpg");
    if ( background == NULL){
        cout<<"could not load background" << endl;
    }

    transparentimage = IMG_Load("green.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,screen,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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将透明 .PNG 图像传输到屏幕上 的相关文章

随机推荐

  • 如何让notepad++在cmd中像普通记事本一样工作?

    我喜欢使用命令提示符来编写和编译java 为了编写代码 我在cmd中输入 记事本MyJavaClass java 这将打开记事本并询问我是否要创建新文件 如果它尚不存在 对我来说 问题是我喜欢使用 notepad 作为文本编辑器 因为它有很
  • 同一应用程序的多个实例在堆栈中生成

    如果有一个应用程序有登录活动 并且它通过单击图标启动 此登录活动也可以由另一个意图启动 问题是当活动运行时 通过触摸应用程序图标启动 当它收到不同的意图调用时 它会启动另一个登录活动 当收到不同的意图调用来启动登录活动时 如何在关闭当前正在
  • 在 Enum 中搜索字符串并返回 Enum

    我有一个枚举 public enum MyColours Red Green Blue Yellow Fuchsia Aqua Orange 我有一个字符串 string colour Red 我希望能够返回 MyColours Red f
  • MATLAB > MEX 文件 > 托管 DLL 中的内存泄漏

    My MEX file http en wikipedia org wiki MEX file用 C CLI 编写并调用用 C 编写的 DLL 当 gcnew 一个对象时 当 mexFunction 返回时它不应该被垃圾收集吗 它的引用应该
  • 如何使用谷歌地图 API 制作一个在特定半径范围内搜索项目的表单?

    我正在研究一个website https jsfiddle net n8aofgtz 9 embedded result我想在谷歌地图上围绕当前位置或一些手动地址画一个圆圈 用户可以选择决定是否要围绕当前位置或他们提供的某个随机地址进行环绕
  • 从 DataGridViewComboBoxColumn 选择值?

    我想知道如何选择 DataGridViewComboBoxColumn 值作为默认值 在 DataGrid 中 有 4 列以及一个 DataGridViewComboBoxColumn 数据表正在绑定网格 但对于 DataGridViewC
  • 撤消/重做实施[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给我一些如何实现撤消 重做功能的想法 就像我们在文本编辑器中一样 我应该使用什么算法以及我可以阅读什么 谢谢 我知道撤消类型有两大类
  • 路径中的 SVG 图像 - HTML

    我遇到了一个棘手的问题 我似乎无法弄清楚 它有很多不同的文件 所以我们先不添加任何代码或文件文档 所以我得到了一个 SVG 图像 上面有很多方形路径 我在 Inkscape 中的一条方形路径上放置了一张方形图像 然后我将 SVG 文件嵌入到
  • R:使用 mouseadds lm.cluster 进行聚类稳健标准误差 - 子集和权重的误差

    我正在尝试使用 mouseadds 包中的 lm cluster 函数来获取多重插补数据集的稳健聚类标准误差 我能够运行它的标准版本 但当我尝试添加子集或权重时出现以下错误 Error in eval substitute subset d
  • .height(item.height()) jquery 在 IE 中太慢了!备择方案?

    我正在尝试设置绝对定位项目的高度以匹配其容器元素的高度 问题是这些元素有数百个 标题中的标准代码在 chrome 中运行得很好 但在 IE 中却拖得很慢 我应该如何缓解这个问题 Too SLOW in IE var starttime ne
  • 反射,从方法中获取返回值

    我们如何执行一个方法并从Reflection中获取返回值 Type serviceType Type GetType class true var service Activator CreateInstance serviceType s
  • 为什么我无法访问静态函数中的私有构造函数,如下所示? [复制]

    这个问题在这里已经有答案了 我目前正在编写一个弱引用资源管理器 如下所示 编译器抱怨管理器有一个私有构造函数 我的问题是 为什么我无法访问静态函数中的私有成员函数 ifndef TENSOR MANAGER H define TENSOR
  • 我需要实现什么接口才能允许 VBA 中的 ForEach 作用于用 delphi 编写的 COM 对象?

    想象一下 我想在 VBA 伪代码 中执行类似的操作 并假设我有一个可枚举属性 IDList Dim MyObject object set MyObject CreateObject MyObjectClass for each Item
  • 无法安装h5py

    我正在尝试安装h5py http www h5py org 但是当我这样做时pip install h5py or use python setup py install从源代码来看 致命错误 hdf5 h No such file or
  • speex解码出错

    我使用 speex 对一些音频数据进行编码并通过 UDP 发送 然后在另一端对其进行解码 我用 speex 进行了一些测试 发现如果我在编码后立即解码数据包 则解码后的数据与原始数据相差甚远 缓冲区开头的大部分字节都是 0 因此 当我解码通
  • 任意多个节点的贝尔曼-福特距离向量算法

    我正在尝试为模拟路由器的类编写一个程序 到目前为止我已经设置了基础知识 路由器 可以通过模拟服务器向连接到该服务器的其他 路由器 发送和接收数据包 每个数据包仅包含该路由器的距离向量 当路由器接收到数据包时 它应该使用贝尔曼 福特算法相应地
  • 我可以在“coqtop - nois”下定义策略吗?

    coqtop nois Welcome to Coq 8 7 0 October 2017 Coq lt Ltac i idtac Toplevel input characters 0 4 gt Ltac i idtac gt Error
  • 如何在 Windows 中使用 PuTTY 创建 SSH 隧道?

    我需要在 Windows 中使用 PuTTY 创建 SSH 隧道 这与 Linux 中的命令相同 ssh fN L 2000 SomeIp 2000 myusername myLinuxBox 我在 PuTTY 中尝试了许多选项 包括将 G
  • 将大型 JSON 对象传递到新窗口中的另一个页面。

    如果这个问题已经得到回答 我提前道歉 我已经用谷歌搜索了几个小时了 但仍然没有找到任何似乎可以回答我的确切问题的东西 本质上 我有一个非常复杂 高度风格化的视图 它显示从数据库中提取的特定于用户的数据 我已将数据捕获为 JSON 对象 并使
  • 将透明 .PNG 图像传输到屏幕上

    你好 我有一个图像 上面画了一个黑色矩形 它的背景是透明的 该文件保存为 png clear png 然后我有另一个图像 它只是保存为 jpeg 的纯红色背景 background jpeg 我试图做的是使clear png 中的黑色矩形显