SDL2 从 psdl_surface 中读取一个像素的 RGB 值

SDL2 reading RGB values of a pixel from psdl_surface

如何使用 Pascal SDL2 从 sdl_surface 上指定的 x y 位置读取像素的 RGB 值?我已经尝试找到解决方案,但没有找到任何有效的方法。

我试过了

function get_pixel32(surface: psdl_surface; location: vector2): uInt32;
var pixels: ^uInt32;
begin
    if sdl_mustLock(surface) then sdl_lockSurface(surface);
    
    pixels^:= uInt32(surface^.pixels);
    get_pixel32:= pixels[(location.y * surface^.w) + location.x];

    sdl_unlockSurface(surface);
end;

begin
    pD:= get_pixel32(surface1, vector2.new(1, 1));
    
    sdl_getRGBA(pD, surface1^.format, @r, @g, @b, @a);
end.

但是当我在表面的 X 坐标上循环 32 个像素时,它返回了非随机模式的随机颜色(黑色、随机深色、随机亮色、随机深色、黑色等...) .

局部变量的值是随机的(垃圾),应该被初始化。 pixels 变量是一个指针。在赋值 pixels^:= uInt32(surface^.pixels); 中,您不初始化变量,而是将数据写入某个随机内存位置。

正确的初始化是

  pixels := PuInt32(surface^.pixels);