• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 16:46:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

目前我正在使用 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 度吗? 谢谢



Best Answer-推荐答案


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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap