0

この関数は黒の画像を返します。Sparrow Library を使用しています。

これは私のコードです:

-(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];
}
4

1 に答える 1

1

あなたが示すコードには、Sparrowコードがほとんどありません(CGRectに非常に似ているSPRectangleを除く)。Sparrow シーンの長方形の領域のキャプチャを保存しようとしているようです。Sparrow は、OpenGL 実装の詳細からあなたを抽象化するつもりです。SPRenderTexture を使用するだけの方が簡単ではないでしょうか? http://doc.sparrow-framework.org/core/Classes/SPRenderTexture.html

また、SPImage ではなく UIImage を返すようにしてください。それが役に立てば幸い。

于 2013-01-20T16:51:22.240 に答える