从iOS中的缓冲区中绘制图像

时间:2011-05-02 14:49:41

标签: ios uiview opengl-es ios4 opengl-es-2.0

我目前正在开发一个iOS项目,它是一种客户端VNC。已成功建立服务器 - 客户端连接。程序以RAW格式接收屏幕图像并将其存储在缓冲区中。

我的问题是如何在UIView中绘制缓冲区,以便在更新de缓冲区时视图也是如此。

我已阅读OpenGL ES Programming Guide for iOS

我想这是我问题的解决方案,但我真的很困惑。有人能给我一个关于如何在UIView中渲染缓冲区的例子吗?或者,如果有人有更好的解决方案?

3 个答案:

答案 0 :(得分:1)

RemoteScreenController.m
- (void) setMappedPtr:(unsigned char *)ptr {

    m_mappedPtr = ptr;
    int bitsPerComponent = 8;
    int bitsPerPixel = 32;
    int bytesPerRow = 4 * 1680;
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, m_mappedPtr, 1680*1050*4, NULL);
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();      
    CGBitmapInfo bitmapInfo = kCGImageAlphaNoneSkipLast;
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;

    CGImageRef imageRef = CGImageCreate( 1680, 1050, bitsPerComponent, bitsPerPixel, 
                                                                                bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);

    UIImage *myImage = [UIImage imageWithCGImage:imageRef];
    myView = [[UIImageView alloc] initWithImage:myImage];
    [self.view addSubview:myView];

在我的数据管理器课程中,我引用了RemoteScreenController。收到第一个缓冲区后,它会调用setMappedPtr来初始化图像并将其添加到视图中。然后缓冲区由另一个类更新。

答案 1 :(得分:0)

签出CGImageCreate(),然后可以使用它从原始数据创建正确的UIImage([UIImage imageWithCGImage:cgImage])。然后创建一个UIImageView并将其添加到UIView中进行显示。

对于OpenGL,CGImage应该是您所需要的(如this示例中所示)。

答案 2 :(得分:0)

最后,每当我的缓冲区更新时,我都会创建一个CGDataProviderRef和一个'CGImageRef',然后使用[imageView setImage:[UIImage imageWithCGImage:imageRef]];我手动重绘图像。我很确定有更好的解决方案,我对所有讨论都持开放态度。