gpt4 book ai didi

iphone - 如何从 iPhone 上的 OpenGL ES 上下文获取透明图像

转载 作者:行者123 更新时间:2023-12-03 16:21:46 24 4
gpt4 key购买 nike

我在 iPhone 上遇到 OpenGL ES 问题。

我正在开发一个项目,它在 View 上绘制一些内容,然后保存图像。它还具有背景图像。我将从 View 中获取的图像和背景图像结合起来。

我将 View 的不透明属性设置为“否”,但从 View 中获取的图像仍然不透明。所以我无法将这两个图像组合在一起。我只能看到正面图片,找不到背景图片。

CAEAGLLayer *EAGLLayer = (CAEAGLLayer *)self.layer;
EAGLLayer.opaque = NO;

获取图像代码如下:

- (UIImage *)GetImage
{
CGFloat Width = self.frame.size.width;
CGFloat Height = self.frame.size.height;
GLubyte *TmpBuffer = (GLubyte *)malloc(Width * Height * 4);
glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, TmpBuffer);
GLubyte *Buffer = (GLubyte *)malloc(Width * Height * 4);

for(int y=0; y<Height; y++) {
for(int x=0; x<Width * 4; x++) {
Buffer[((NSInteger)Height - 1 - y) * (NSInteger)Width * 4 + x] = TmpBuffer[y * 4 * (NSInteger)Width + x];
}
}
CGDataProviderRef Provider = CGDataProviderCreateWithData(NULL, Buffer, Width * Height * 4, NULL);

int BitsPerComponent = 8;
int BitsPerPixel = 32;
int BytesPerRow = 4 * 480;
CGColorSpaceRef ColorSpaceRef = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo BitmapInfo = kCGBitmapByteOrderDefault;
CGColorRenderingIntent RenderingIntent = kCGRenderingIntentDefault;

// Make the cgimage.
CGImageRef ImageRef = CGImageCreate(480, 320,
BitsPerComponent,
BitsPerPixel,
BytesPerRow,
ColorSpaceRef,
BitmapInfo,
Provider,
NULL, NO,
RenderingIntent);

return [UIImage imageWithCGImage:ImageRef];
}

组合这样的代码:

- (void)Combine:(UIImage *)Back
{
UIGraphicsBeginImageContext(self.frame.size);

CGContextRef aContext = UIGraphicsGetCurrentContext();

CGContextSaveGState(aContext);

CGContextScaleCTM(aContext, 1.0, -1.0);
CGContextTranslateCTM(aContext, 0, -self.frame.size.height);

UIImage *Front = [self GetImage];

CGContextDrawImage(aContext,
CGRectMake(0, 0, self.frame.size.width, self.frame.size.height),
Back.CGImage);

CGContextDrawImage(aContext,
CGRectMake(0, 0, self.frame.size.width, self.frame.size.height),
Front.CGImage);

CGContextRestoreGState(aContext);

UIImageWriteToSavedPhotosAlbum(UIGraphicsGetImageFromCurrentImageContext(), nil, nil, nil);

UIGraphicsEndImageContext();
}

我该怎么办?任何建议都会很高兴。提前致谢。

最佳答案

我已经做到了这一点。

我使用了以下 CAEAGLLayer 属性:

eaglLayer.opaque = NO;      
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], kEAGLDrawablePropertyRetainedBacking,kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];

并在您的-(UIImage *)GetImage方法中使用:

CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast;
<小时/>

如果需要,您的Combine:方法可以调整为将两个组合图像保存到 UIImage 中,方法是:

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

希望这有帮助:)

关于iphone - 如何从 iPhone 上的 OpenGL ES 上下文获取透明图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349912/

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