首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在iOS6.0上用SPRectangle保存UIImage时修复错误

如何在iOS6.0上用SPRectangle保存UIImage时修复错误
EN

Stack Overflow用户
提问于 2012-11-27 12:16:33
回答 1查看 70关注 0票数 0

此函数返回黑色图像。我使用的是Sparrow库。

这是我的代码:

代码语言:javascript
复制
-(UIImage *) saveRectangle:(SPRectangle*)rectangle
{
    int numberOfComponents = 8;
    int width = rectangle.width;
    int height = rectangle.height;

    NSInteger bufferLenght = width * height * numberOfComponents;


    NSMutableData * buffer= [NSMutableData dataWithLength:bufferLenght];

    glPixelStorei(GL_PACK_ALIGNMENT, 4); // force 4 byte alignment

    glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, [buffer mutableBytes]);


    CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, [buffer mutableBytes], bufferLenght, NULL);
    CGImageRef iref = CGImageCreate(width, height, 8, 32, width * 4, CGColorSpaceCreateDeviceRGB(), kCGBitmapByteOrderDefault, ref, NULL, true, kCGRenderingIntentDefault);
    uint32_t* pixels = (uint32_t *)malloc(bufferLenght);
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width*4, CGImageGetColorSpace(iref), kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Big);
    CGContextTranslateCTM(context, 0.0, height);
    CGContextScaleCTM(context, 1.0, -1.0);
    CGContextDrawImage(context, CGRectMake(0.0, 0.0, width, height), iref);
    CGImageRef outputRef = CGBitmapContextCreateImage(context);
    free(pixels);

    return [UIImage imageWithCGImage:outputRef];
}
EN

回答 1

Stack Overflow用户

发布于 2013-01-21 00:51:22

您显示的代码几乎没有Sparrow代码(除了非常类似于CGRect的SPRectangle )。听起来像是在尝试保存Sparrow场景的矩形区域的捕获。Sparrow打算将您从OpenGL实现细节中抽象出来。你确定只使用SPRenderTexture不会更容易吗?http://doc.sparrow-framework.org/core/Classes/SPRenderTexture.html

另外,要确保返回的是UIImage而不是SPImage。希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13577315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档