gpt4 book ai didi

ios - 为什么 CGImage 数据不能在往返中存活下来?

转载 作者:行者123 更新时间:2023-11-29 11:12:45 26 4
gpt4 key购买 nike

我有一个手绘 View (用户可以用手指画线)。我只使用几种颜色,所以我有一个我写的压缩算法(想通过本地网络将它发送到另一台 iPad)但我似乎无法准确地从图形上下文中获取数据,即使使用这个简单的测试:

//Get the data
UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, 0.0f);
CGContextRef c = UIGraphicsGetCurrentContext();
[self.layer renderInContext:c];
baseImageView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

CGImageRef imageRef = baseImageView.image.CGImage;
NSData *dataToUse = (NSData *)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));

//Reuse the data
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)dataToUse);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGImageRef test = CGImageCreate(width,height,8,32,4*width,colorSpace,
kCGBitmapByteOrder32Big|kCGImageAlphaPremultipliedLast,provider,NULL,false,
kCGRenderingIntentDefault); //I get width and height from another part of the program

imageView.image = [UIImage imageWithCGImage:test];

我只是从一个 CGImage 中复制数据并尝试将其插入另一个。然而,结果是垃圾,不仅如此,由于某种原因,当我复制数据时它以 BGRA 出现,但 CGImageCreate 想要 RGBA。这个往返测试哪里出错了?

最佳答案

看起来答案是仅仅获得数据提供者是不够的。您需要实际将图像渲染到位图上下文中并从那里获取数据。修改方式:

//Get the data
CGImageRef imageRef = baseImageView.image.CGImage;
size_t height = CGImageGetHeight(imageRef);
size_t width = CGImageGetWidth(imageRef);
size_t bufferLength = width * height * 4;
unsigned char *rawData = (unsigned char *)malloc(bufferLength);

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(bitmapData, width, height, 8,
4*width, colorSpace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorSpace);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);

NSData *dataToUse = [NSData dataWithBytes:rawData length:bufferLength];

//Later free(rawData);

使用数据还是一样。

关于ios - 为什么 CGImage 数据不能在往返中存活下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10811276/

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