【问题标题】:fast way to get and set pixel color in pygame在pygame中获取和设置像素颜色的快速方法
【发布时间】:2014-12-30 18:36:19
【问题描述】:

我正在使用 pygame 做一个简单的项目,我需要获取和设置像素颜色。 使用pygame.get_at(())pygame.set_at(()) 非常慢。

所以我尝试使用 PixelArray 手动获取和设置颜色。但这仍然很慢

有没有更快的方法来做到这一点?

是否有可能在 c++ 中创建一个获取和设置像素的函数,这样它会更快,或者在 python/pygame 中有没有办法做到这一点?

例如:

一个 c++ 函数返回给定坐标处的像素颜色,另一个函数将给定坐标处的像素设置为给定颜色。

然后我可以在 pygame 中以某种方式调用这些函数。

非常感谢。

【问题讨论】:

  • 你想在 pygame 中实现一个 c++ 函数吗?
  • 正确(如果它是解决我的问题的最快方法)。我需要一种快速的方法来获取和设置 pygame 屏幕上的像素颜色
  • 你学过c++吗?
  • 是的,但只是基本上。我从来没有用它做过任何图形

标签: python c++ python-3.x pygame pixel


【解决方案1】:

C++ SetPixel 和 GetPixel 函数

window.h 库的一部分

将像素设置为颜色坐标

COLORREF SetPixel(
  _In_  HDC hdc,
  _In_  int X,
  _In_  int Y,
  _In_  COLORREF crColor
);

返回指定坐标的像素颜色

COLORREF GetPixel(
  _In_  HDC hdc,
  _In_  int nXPos,
  _In_  int nYPos
);

SDL:

获取颜色

Uint32 rawpixel = getpixel(surface, x, y);
Uint8 red, green, blue;

SDL_GetRGB(rawpixel, surface->format, &red, &green, &blue);

在坐标处设置像素

void setpixel(SDL_Surface *screen, int x, int y, Uint8 r, Uint8 g, Uint8 b)
{
    Uint32 *pixmem32;
    Uint32 colour;  

    colour = SDL_MapRGB( screen->format, r, g, b );

    pixmem32 = (Uint32*) screen->pixels  + y + x;
    *pixmem32 = colour;
}

Link

【讨论】:

  • 太棒了!如何将其实现到 pygame 程序中?
  • 你应该看到上面链接的评论
  • 我不认为这个解决方案可以与 pygame 应用程序集成,pygame 使用 SDL 来渲染图形,您提供的功能是 MS Windows API 的一部分,旨在用于 Windows窗口,而不是 pygame 表面。
  • 抱歉,这两个函数(window API 和 SDL)是唯一可以满足操作要求的可用函数
猜你喜欢
  • 2013-12-05
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多