- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个方法,需要逐像素解析一堆大型 PNG 图像(每个 PNG 都是 600x600 像素)。它似乎在模拟器上工作得很好,但在设备(iPad)上,我在某些内部内存复制功能中得到了 EXC_BAD_ACCESS 。看起来尺寸是罪魁祸首,因为如果我在较小的图像上尝试,一切似乎都有效。这是下面方法中与内存相关的内容。
+ (CGRect) getAlphaBoundsForUImage: (UIImage*) image
{
CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = malloc(height * width * 4);
memset(rawData,0,height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(rawData, width, height, bitsPerComponent, bytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
/* non-memory related stuff */
free(rawData);
当我在一堆图像上运行这个程序时,它运行了 12 次然后就崩溃了,而在模拟器上它运行没有问题。大家有什么想法吗?
最佳答案
运行 12 次然后崩溃听起来像是内存不足的问题。 CGContext 可能在内部创建一些大型自动释放结构。由于您在循环中执行此操作,因此它们不会被释放,因此您会耗尽内存并死亡。
不过我不确定 Core Foundation 如何处理临时对象。我不认为 CF 对象具有相当于自动释放的功能,并且 Core Graphics 上下文几乎肯定是在处理 CF 对象而不是 NSObject。
为了减少代码中的内存流失,我建议在开始处理之前重构它以创建一个离屏 CGContext 一次,并重复使用它来处理每个图像。完成后释放它。无论如何,这都会更快(因为您不会在每次循环时分配巨大的数据结构。)
我打赌这会消除你的崩溃问题,而且我打赌它也会使你的代码变得更快。与其他操作相比,内存分配非常慢,并且您需要使用一些相当大的数据结构来处理 600x600 像素 RGBA 图像。
关于iphone - iPhone/iPad 上的 CGBitmapContextCreate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2619224/
这就是我创建 UIImage 的方式。我用 calloc 分配了 piOutData。现在当我最后调用 CGImageRelease 时,它会自动释放 piOutData 还是我需要通过 free 手
我正在使用以下代码在我的 iOS 应用程序的 touchesEnded 截取绘图: dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PR
这段代码是我写的: bitmapData = calloc(1, bitmapByteCount ); context = CGBitmapContextCreate (bitmapData,
在我的应用程序中,我需要调整和裁剪一些本地和在线存储的图像。我正在使用Trevor Harmon's tutorial它实现了UIImage+Resize。 在我的 iPhone 4(iOS 4.3.
我迫切需要创建一个没有 alpha channel 的 CGContextRef。不幸的是,使用 Core Graphics,您不能使用 CGBitmapCreateContext 指定 kCGIma
- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize { // If t
我想使用来自 Apple 开发人员页面的示例。 Apple Dev Pages on AVFoundation 现在,我按照文档说明使用了 imageFromSampleBuffer:sampleBu
几天来我一直在为撤消功能苦苦挣扎,我真的不知道如何解决这个问题。 我在使用自定义 UIimageView 的 UIViewController 上制作绘图功能。 问题是当我触发撤消功能时,之前的绘图没
我有以下代码来创建新的位图图形上下文。 NSLog(@"newRect Width %f",newRect.size.width); NSLog(@"newRect Height %f",newRec
在 IOS 下,我试图通过绘制到通过 CGBitmapContextCreate 创建的上下文来创建图像。以下是我正在使用的代码(类似于我找到的一些示例),但是当我调用它时,没有绘制任何内容。请注意,
我正在尝试在后台线程中更改图像的颜色。 Apple 文档说 UIGraphicsBeginImageContext 只能从主线程调用,我正在尝试使用 CGBitmapContextCreate: co
CGBitmapContext 在什么情况下会分配失败?我有一个 TableView ,它有多个 View 选项。用户可以看到一个只有预览的小表格单元格,每行一个较大的预览,或每行两个并排预览。前两个
我手动创建了一个 CGBitmapContext: bitmapContext = CGBitmapContextCreate( myImageData, width, height, 8, 4 *
创建位图上下文时出现此错误: CGBitmapContextCreate:不支持的参数组合:8 个整数位/组件; 24 位/像素;三分量色彩空间; kCGImageAlphaNone; 7936 字节
我有一个方法,需要逐像素解析一堆大型 PNG 图像(每个 PNG 都是 600x600 像素)。它似乎在模拟器上工作得很好,但在设备(iPad)上,我在某些内部内存复制功能中得到了 EXC_BAD_A
CGContextRef context = CGBitmapContextCreate(nil, width, //if width More than 6002/4
我正在尝试创建一个 8 位灰度上下文,如下所示: CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); CGContextRef c
我正在使用以下代码(来自博客文章)来调整图像大小 if (inImage.size.width <= inImage.size.height) { // Portrait ratio
我正在使用 quartz2d 生成图像,我想将其用作 opengl 纹理。棘手的部分是我希望每个像素使用尽可能少的位,因此我创建 cgContext 如下: int bitsPerComponent
我使用以下代码来显示 32 位灰度图像。即使我明确地将每个像素设置为 4294967297(应该是白色),最终结果始终是黑色。我在这里做错了什么?该图像只有 64x64 像素。 CGColorSpac
我是一名优秀的程序员,十分优秀!