我需要拍摄一张 m * m 的图像并返回一张 n * n 的图像。
我有这个代码:
void Zoom_Filter(SDL_Surface* surface)
int newsize = 28;
Uint32* pixels = surface -> pixels;
Uint32* pixels2 = malloc(newsize*newsize*sizeof(Uint32));
int cote = surface -> w;
double Zoom = ((double)newsize)/(double)cote;
for(int i = 0; i < newsize; i++)
{
for(int j = 0; j < newsize; j++)
{
int X = j/Zoom;
int Y = i/Zoom;
Uint32 px = pixels[(Y*cote + X)];
pixels2[i * newsize + j] = px;
}
}
surface -> w = newsize;
surface -> h = newsize;
surface -> pixels = pixels2;
但是效果不太好:
结果:
我已经找到答案了。 我认为 SDL 在直接修改图像大小和像素列表大小时存在一些问题。 为了使其工作,我刚刚创建了一个新表面。 谢谢您的帮助。