【问题标题】:Read RGBA values of pixel from surface/texture with SDL2?使用 SDL2 从表面/纹理读取像素的 RGBA 值?
【发布时间】:2019-12-01 21:10:52
【问题描述】:

如何在 Free Pascal 中使用 SDL2 从表面或纹理中读取给定坐标 x 和 y 处特定像素的 RGBA 值?

【问题讨论】:

  • SDL_RenderReadPixels()
  • 是的,我如何从中准确提取 RGBA 值? SDL_RenderReadPixels 将从表面读取像素并将它们复制到目标纹理上,仅此而已。它本身不会给我一个像素的 RGBA 值(或在 SDL_RenderReadPixels 的情况下为矩形)。
  • 你错了。它将值写入void* pixels。将 32 位分配为 uint8_t pixels[4]; 并调用 SDL_RenderReadPixels(renderer, &r, SDL_PIXELFORMAT_RGBA32, &pixels, 1); 其中 const SDL_Rect r = {x, y, 1, 1}; 然后 pixels[0] 是红色值,pixels[3] 是 alpha 等(但在 Pascal 中不是 C)
  • wiki.libsdl.org/SDL_RenderReadPixels 甚至不包含“纹理”这个词!
  • @seb0029 不要将您的解决方案编辑到您的问题中 - 如果您认为值得分享,请将其作为答案发布。

标签: pascal sdl-2


【解决方案1】:
var
    spriteSheetTexture: PSDL_texture;
    pixel: ^UInt8;
    pixelCnt: byte;
    SDLRect: TSDL_rect;

spriteSheetSurface:=SDL_loadBMP(PChar('spr4\sprite sheets\spr'+fVal(spriteSheetNum)+'.spr'));
SDLRect.x:=0; SDLRect.y:=0; SDLRect.w:=1; SDLRect.h:=1;
SDL_renderReadPixels(SDLRenderer, @SDLRect, 0, pixel, spriteSheetSurface^.pitch);
for pixelCnt:=0 to 3 do
    writeLn(pixel[pixelCnt]);

实际上它似乎不起作用。无论我读取什么像素,Pixel 对于每个索引都返回零。

当我说 SDL_RenderReadPixels 涉及纹理时,我是对的。 SDL 2 文档提到它:“使用此函数从当前渲染目标读取像素”。当前渲染目标是纹理或 SDL 屏幕 (https://wiki.libsdl.org/SDL_RenderReadPixels)。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多