SDL#u BlitScaled不';行不通 这是我的C++代码: #include <SDL2/SDL.h> SDL_Window* gWindow = NULL; SDL_Renderer* gRenderer = NULL; int main( int argc, char* args[] ) { SDL_Init( SDL_INIT_VIDEO ); gWindow = SDL_CreateWindow( "test", 0,0,640,480, SDL_WINDOW_SHOWN ); gRenderer = SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED); SDL_Surface* x = SDL_CreateRGBSurface(0,50,50,32,0xFF,0xFF00,0xFF0000,0XFF000000); SDL_Surface* y = SDL_CreateRGBSurface(0,640,480,32,0xFF,0xFF00,0xFF0000,0XFF000000); SDL_Rect a = {0,0,50,50}; SDL_RenderClear(gRenderer); SDL_FillRect(x,&a,SDL_MapRGBA(x->format,255,255,0,255)); SDL_Rect dest = {0,0,100,100}; SDL_BlitScaled( x, &a, y, &dest ); //Does nothing dest.x = 200; SDL_BlitSurface( x, &a, y, &dest ); SDL_Texture* t; t = SDL_CreateTextureFromSurface(gRenderer,y); SDL_RenderCopy(gRenderer,t,NULL,NULL); SDL_RenderPresent(gRenderer); SDL_Delay(2000); return 0; }

SDL#u BlitScaled不';行不通 这是我的C++代码: #include <SDL2/SDL.h> SDL_Window* gWindow = NULL; SDL_Renderer* gRenderer = NULL; int main( int argc, char* args[] ) { SDL_Init( SDL_INIT_VIDEO ); gWindow = SDL_CreateWindow( "test", 0,0,640,480, SDL_WINDOW_SHOWN ); gRenderer = SDL_CreateRenderer(gWindow,-1,SDL_RENDERER_ACCELERATED); SDL_Surface* x = SDL_CreateRGBSurface(0,50,50,32,0xFF,0xFF00,0xFF0000,0XFF000000); SDL_Surface* y = SDL_CreateRGBSurface(0,640,480,32,0xFF,0xFF00,0xFF0000,0XFF000000); SDL_Rect a = {0,0,50,50}; SDL_RenderClear(gRenderer); SDL_FillRect(x,&a,SDL_MapRGBA(x->format,255,255,0,255)); SDL_Rect dest = {0,0,100,100}; SDL_BlitScaled( x, &a, y, &dest ); //Does nothing dest.x = 200; SDL_BlitSurface( x, &a, y, &dest ); SDL_Texture* t; t = SDL_CreateTextureFromSurface(gRenderer,y); SDL_RenderCopy(gRenderer,t,NULL,NULL); SDL_RenderPresent(gRenderer); SDL_Delay(2000); return 0; },c++,sdl,C++,Sdl,出现了另一个问题。我尝试将x复制到y,将x完全覆盖y,即使x中有透明区域。但是如果我不使用SDL\u BLENDMODE\u NONE,复制到y的区域的alpha将设置为128,这不是我的目的。用颜色填充y,使其工作 我补充说: SDL_FillRect(y, &y->clip_rect, SDL_MapRGBA(x->format, 255, 0, 0, 255)); 在对x执行SDL\u FillRect之后,它就工作了 在进一步的实验中,仅仅用alpha填充y的一部分

出现了另一个问题。我尝试将
x
复制到
y
,将
x
完全覆盖
y
,即使
x
中有透明区域。但是如果我不使用SDL\u BLENDMODE\u NONE,复制到
y
的区域的alpha将设置为128,这不是我的目的。

用颜色填充
y
,使其工作

我补充说:

SDL_FillRect(y, &y->clip_rect, SDL_MapRGBA(x->format, 255, 0, 0, 255));
在对
x
执行
SDL\u FillRect
之后,它就工作了

在进一步的实验中,仅仅用alpha填充
y
的一部分,我相信
SDL_BlitScaled
不会从源曲面复制alpha,因此除非dest曲面具有alpha,而目标rect是alpha,否则您不会看到结果


更多的实验表明,曲面的默认混合模式是
SDL\u BLENDMODE\u blend
,将
y
的模式更改为
SDL\u BLENDMODE\u NONE
也可以工作。

我只想使用SDL\u BlitScaled将SDL\u曲面
x
复制到
y
,但这对我不起作用。我希望我能让自己明白,但英语不是我幼稚的语言。酷!谢谢你的回答!但我仍然有一个问题。我在帖子上更新了它。如果你看一看,我将非常感激。在这一点上,我不确定你的目标是什么。如果希望
x
的部分透明,则将其alpha设置为0。x:半透明,半不透明,Y:alpha 128。然后将x复制到Y中,x的透明部分将变为半透明,而另一部分将变为不透明,清楚吗?PS:我尝试了另一种方法来缩放图片,所以这个问题不再那么重要了。
SDL_FillRect(y, &y->clip_rect, SDL_MapRGBA(x->format, 255, 0, 0, 255));