我目前正在使用 SDL2 编写一个简单的程序,您可以将一些形状(正方形、圆形、三角形等)拖到画布中,然后旋转它们并移动它们。每个形状都由从 PNG 文件创建的 SDL 纹理直观地表示(使用 SDL_image 库中的 IMG_LoadTexture 函数)。
问题是我想知道纹理中的某个像素是否透明,这样当有人单击图像时我可以确定是否必须执行某些操作(因为单击是在非透明区域上) 。因为这是一些学校作业,所以我面临一些限制,也就是说,只能使用 SDL2 库,而且我无法拥有一些地图来查找相关像素是否透明,因为图像是动态选择的。此外,我考虑使用 SDL 表面来完成此任务,从原始图像创建它们,但由于形状是通过纹理旋转的,这是行不通的。
您可以通过使用渲染目标来完成此任务。
SDL_SetRenderTarget(renderer, target);
... render your textures rotated, flipped, translated using SDL_RenderCopyEx
SDL_RenderReadPixels(renderer, rect, format, pixels, pitch);
Run Code Online (Sandbox Code Playgroud)
在最后一步中,您使用SDL_RenderReadPixels从渲染目标读取像素,然后您必须确定所需像素的 Alpha 通道是否为零(透明)。您可以从渲染目标中只读取您想要的一个像素,也可以读取整个纹理,您选择的选项取决于您必须执行的命中测试的数量、纹理旋转/移动的频率等。