gpt4 book ai didi

ios - 如何使用图像的像素数据将图像旋转 90 度?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:51:50 26 4
gpt4 key购买 nike

目前我正在使用 glreadpixels() 捕获屏幕。捕获的图像通常是镜像图像,因此我将图像翻转回正常状态。现在我想将捕获的数据(图像)旋转 90 度。知道怎么做吗?

我用来捕获屏幕数据的代码是:

CGRect screenBounds = [[UIScreen mainScreen] bounds];

int backingWidth = screenBounds.size.width;
int backingHeight =screenBounds.size.height;

glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);


NSInteger myDataLength = backingWidth * backingHeight * 4;
GLuint *buffer;
if((buffer= (GLuint *) malloc(myDataLength)) == NULL )
NSLog(@"error initializing the buffer");
glReadPixels(0, 0, backingWidth, backingHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
// code for flipping back (mirroring the image data)
for(int y = 0; y < backingHeight / 2; y++) {
for(int xt = 0; xt < backingWidth; xt++) {
GLuint top = buffer[y * backingWidth + xt];
GLuint bottom = buffer[(backingHeight - 1 - y) * backingWidth + xt];
buffer[(backingHeight - 1 - y) * backingWidth + xt] = top;
buffer[y * backingWidth + xt] = bottom;
}
}

知道如何将缓冲区中捕获的数据旋转 90 度吗?谢谢

最佳答案

size_t at (size_t x, size_t y, size_t width)
{
return y*width + x;
}

void rotate_90_degrees_clockwise (
const pixel * in,
size_t in_width,
size_t in_height,
pixel * out)
{
for (size_t x = 0; x < in_width; ++x) {
for (size_t y = 0; y < in_height; ++i)
out [at (in_height-y, in_width-x, in_height)]
= in [at (x, y, in_width)];
}
}

有时候,用铅笔和纸,没有什么能比得上一分钟:-)

如果您保持 x_in 和 y_in 与 x_out 和 y_out 的对比——递增一个并递减另一个——并通过在循环之间缓存 x,这可以得到优化,但这是基本思想。

关于ios - 如何使用图像的像素数据将图像旋转 90 度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6745835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com