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);
如何使用 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);