【问题标题】:SDL2 reading RGB values of a pixel from psdl_surfaceSDL2 从 psdl_surface 读取像素的 RGB 值
【发布时间】:2021-01-29 21:29:40
【问题描述】:

如何使用 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 个像素时,它以非随机模式(黑色、随机深色、随机亮色、随机深色、黑色等)返回给我随机颜色。

【问题讨论】:

    标签: sdl pixel sdl-2 pascal


    【解决方案1】:

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

    正确的初始化是

      pixels := PuInt32(surface^.pixels);
    

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      相关资源
      最近更新 更多