Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用Alpha通道复制SDL_曲面_C++_Sdl_Alpha - Fatal编程技术网

C++ 使用Alpha通道复制SDL_曲面

C++ 使用Alpha通道复制SDL_曲面,c++,sdl,alpha,C++,Sdl,Alpha,我遇到过保存复制/剪辑光点的曲面的alpha通道的问题(将曲面的部分光点到较小的曲面上,它们是精灵表)。我尝试过各种解决方案,但最终的结果是,任何本应具有透明度的曲面最终都会变得完全不透明(alpha遮罩变为白色) 所以我的问题是,如何将一个RGBA SDL_曲面复制到另一个新曲面(也称为RGBA),包括alpha通道?如果有任何不同,如何将RGBA曲面的一部分复制到新的RGBA曲面(与源曲面的剪裁部分大小相同),ala tilesheet blitting SDL_BlitSurface似乎混

我遇到过保存复制/剪辑光点的曲面的alpha通道的问题(将曲面的部分光点到较小的曲面上,它们是精灵表)。我尝试过各种解决方案,但最终的结果是,任何本应具有透明度的曲面最终都会变得完全不透明(alpha遮罩变为白色)

所以我的问题是,如何将一个RGBA SDL_曲面复制到另一个新曲面(也称为RGBA),包括alpha通道?如果有任何不同,如何将RGBA曲面的一部分复制到新的RGBA曲面(与源曲面的剪裁部分大小相同),ala tilesheet blitting

SDL_BlitSurface似乎混合了alpha通道,因此,例如,当我想将瓷砖从我的瓷砖表面复制到一个新表面(当然是空白的,我假设SDL默认使用黑色或白色填充表面)时,它最终会丢失其alpha遮罩,因此当瓷砖最终被Blits显示到屏幕上时,它不会与屏幕上的任何内容混合


SDL_DisplayFormatAlpha非常适合使用alpha遮罩复制曲面,但它不接受剪辑参数,它只用于复制整个曲面,而不是其中的一部分,因此我的问题。

我以前遇到过这个问题,目前还没有正式的答案。 然而,我认为唯一的方法是编写自己的复制函数。 本页将帮助您了解SDL_曲面如何存储颜色信息。请注意,8位以上和8位以下的颜色之间存在巨大差异