c++ - 梯度生成产生奇怪的伪像

标签 c++ sdl gradient

当我使用以下代码生成渐变时,它会在图像中心附近产生类似渐变的奇怪裂缝。

生成代码:

void getRgb(GLfloat* pixels1,GLubyte* out)//convert fractional values into color
{
  for (int i = 0;i < 90*90;i++)
  {
    out[(i*3)+0] = pixels1[i]*255;
    out[(i*3)+1] = pixels1[i]*255;
    out[(i*3)+2] = pixels1[i]*255;
  }
}

//gradient generation
multiplier = new GLfloat[90*90];// calc multiplier map

for(int i = 0;i < 90;i++)//2d to 1d
{
  for (int j = 0;j < 90;j++)
  multiplier[i*90 + j] = cos((j)*(3.14/180));
}



SDL_Surface * image = SDL_CreateRGBSurface(SDL_SWSURFACE, 89, 89, 24, 0x000000FF, 0x0000FF00, 0x00FF0000, 0);
GLubyte* save = new GLubyte[90*90*3];
getRgb(multiplier,save);
image->pixels = save;


std::string path = "map.bmp";
SDL_SaveBMP(image, path.c_str());
delete save;
image->pixels = NULL;
SDL_FreeSurface(image);

结果artifact .

最佳答案

那是因为您从余弦中得到了负值。这些不能很好地处理无符号整数像素值,它应该在 [0, 255] 范围内。

关于c++ - 梯度生成产生奇怪的伪像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39240129/

相关文章:

C++:Linux:调用 write() 时 TCP/IP 程序崩溃

c++ - 在另一台计算机上运行使用 Visual Studio 构建的 EXE 文件的问题

c# - 我是否需要在 C# 中使用来自非托管 C++ dll 的原始数据类型执行 MarshalAs?

c - 如果已经按下了向下+向右或向上+向左,则没有空格键的 SDL 事件

ios - 类型 'UIImage' 没有成员 'radialGradientImage'

c++ - 如何从套接字读取中接收自定义数据类型?

c++ - SDL_Delay 不会在每个 Action 之前延迟

c++ - 使用 Allegro/SDL 与 OpenGL/DirectX 制作游戏会遇到哪些限制?

html - CSS 梯度下降为层

html - 如何制作背景渐变