【问题标题】:Changing pixel color in SDL在 SDL 中更改像素颜色
【发布时间】:2011-07-24 04:03:33
【问题描述】:

我正在制作一个只使用带有黑白像素的 PNG 的游戏。但有时我想将白色像素的颜色更改为不同的颜色,例如绿色 (#00FF00)。

我该怎么做呢?

编辑: 好的,我想出了一个解决方案

这是一个简单的函数:

无效 setColor(SDL_Surface *surface, SDL_Color 颜色) { Uint16 *pixels = (Uint16 *) 表面->像素; // 从 Surface 获取像素 // 遍历像素并改变颜色 for (int i = 0; i w * 表面->h);我++){ if (pixels[i] == SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF)) // 搜索白色像素 像素[i] = SDL_MapRGB(表面->格式,color.r,color.b,color.g); } }

请记住,如果您使用 32 位表面,请将“Uint16”更改为“Uint32”,或者将“Uint8”更改为 8 位表面。

我不确定这段代码有多快,但它可以完成工作。

【问题讨论】:

  • This 是如何完成的,适用于所有位深度、alpha 等。

标签: colors sdl pixels


【解决方案1】:

这完全取决于您要设置的颜色。

如果没有更多信息,马上想到的两个 API 是“SDL_SetColors()”和“SDL_SetPalette()”。

但真正的答案是“视情况而定”。

【讨论】:

  • 我尝试了 SDL_SetColors() 和 SDL_SetPalette(),两者都有问题。我确实想出了一个方法。
  • SDL_SetPalette() 仅用于 8 位托盘表面。如果您知道您最多只能拥有 256 种不同的颜色,并且您希望能够快速切换它们,那么这可能是一个不错的选择。但是,在 64 位显示模式下显示 8 位托盘表面时,它可能会在后台执行与您的代码类似的操作。
猜你喜欢
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 2019-01-24
  • 2016-07-27
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
相关资源
最近更新 更多