SDL2笔记05_SDL2透明背景窗口_windows10_使用sdl_texture绘图

本文介绍如何使用SDL2在Windows上创建一个具有透明背景的窗口,并利用SDL_Renderer和SDL_Texture进行图形绘制,包括圆形抗锯齿和窗口透明设置。附带了关键代码片段和透明窗口封装类示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 本节课学习使用SDL2封装一个透明背景的window,并在window上使用SDL_Renderer和SDL_Texture进行绘图
    1. 圆形没有反走样
    2. 计算机几何算法B站有个孔令德老师讲课挺好的,建议看看
      (我只看了两节课,后面工作不忙了再认真看,图论与网络流还没开始看,把SDL和GTK大致学一下再去看把,档期可能要排到明年才能开始看了)

  1. 在windows上要想让SDL_Window和linux不太一样(linux可以直接读取css设置)

    1. 经过多次google终于在这个网址找到了做法http://5.9.10.113/67609916/fully-transparent-window-with-opaque-elements-in-sdl-2链接
    2. 以下为代码网址上copy的代码
                #include <stdio.h>
                #include <SDL.h>
                #include <SDL_image.h>
                #include <SDL_syswm.h>
                #include <iostream>
                #include <Windows.h>
                #include <string>
    
                SDL_Window *window;
                SDL_Renderer *renderer;
    
                SDL_Texture *image;
                int imageWidth = 0;
                int imageHeight = 0;
    
                bool init() {
         
                    //Initialize SDL
                    if (SDL_Init(SDL_INIT_VIDEO) != 0) {
         
                        printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError());
                        return false;
                    }
    
                    //Set texture filtering to linear
                    if (!SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "1")) {
         
                        printf("Warning: Linear texture filtering not enabled!");
                    }
    
                    //Create window
                    window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 500, 300,
                                                 SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS);
                    if (window == NULL) {
         
                        printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
                        return false;
                    }
    
                    //Create renderer for window
                    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
                    if (renderer == NULL) {
         
                        printf("Renderer could not be created! SDL Error: %s\n", SDL_GetError());
                        return false;
                    }
    
                    //Initialize renderer color
                    SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255);
    
                    //Initialize PNG loading
                    int imgFlags = IMG_INIT_PNG;
                    if (!(IMG_Init(imgFlags) & imgFlags)) {
         
                        printf("SDL_image could not initialize! SDL_image Error: %s\n", IMG_GetError());
                        return false;
                    }
                    return true;
                }
    
                bool loadImage(const std::string &path) {
         
                    //The final texture
                    SDL_Texture *newImage = NULL;
    
                    //Load image at specified path
                    SDL_Surface *loadedSurface = IMG_Load(path.c_str());
                    if (!loadedSurface) {
         
                        printf("Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
                        return false;
                    }
    
                    //Create texture from surface pixels
                    newImage = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值