渐变生成会产生奇怪的伪影

时间:2016-08-31 03:08:04

标签: c++ sdl gradient

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

代码:

private bool CustomFilter(object item)
{
    YourClass yourObject = item as YourClass ;
    return yourObject.C2 != 0;
}

结果artifact

3 个答案:

答案 0 :(得分:2)

那是因为你从余弦中得到负值。那些无效的无符号整数像素值应该在[0,255]范围内。

答案 1 :(得分:1)

问题是您已经创建了89x89图像,并且您正在使用90x90阵列填充它。在每一行的末尾都存在不匹配,并且因为每个像素是奇数个字节,所以它将下一行移开一个字节。你的大多数像素几乎都是灰色的,所以你不会看到这种差异,但它会出现在光明和黑暗之间的过渡中。

答案 2 :(得分:1)

好的,可以通过替换:

来修复
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;

使用:

   GLubyte* save = new GLubyte[90*90*3];
   getRgb(multiplier,save);
   SDL_Surface* image =  SDL_CreateRGBSurfaceFrom(save,
                                      90,
                                      90,
                                      24,
                                      90*3,
                                      0x000000FF, 0x0000FF00, 0x00FF0000, 0);