我目前正在开发一个iOS项目,它是一种客户端VNC。已成功建立服务器 - 客户端连接。程序以RAW格式接收屏幕图像并将其存储在缓冲区中。
我的问题是如何在UIView中绘制缓冲区,以便在更新de缓冲区时视图也是如此。
我已阅读OpenGL ES Programming Guide for iOS
我想这是我问题的解决方案,但我真的很困惑。有人能给我一个关于如何在UIView中渲染缓冲区的例子吗?或者,如果有人有更好的解决方案?
答案 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]];
我手动重绘图像。我很确定有更好的解决方案,我对所有讨论都持开放态度。