- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以这就是要点我有一个程序,它有一个由许多小图像组成的大图像,它获取该图像并将其分成许多较小的图像(如电影的帧),然后用户可以去擦洗通过。
我目前使用的是这种方法
- (NSMutableArray *)createArrayFromImage: (NSData *)largerImageData
{
UIImage *largerImage = [UIImage imageWithData: largerImageData];
int arraySize = (int)largerImage.size.height/largerImage.size.width; //Find out how many images there are
NSMutableArray *imageArray = [[NSMutableArray alloc] init];
for (int i = 0; i < arraySize; i++) {
CGRect cropRect = CGRectMake(0, largerImage.size.width * i, largerImage.size.width, largerImage.size.width);
CGImageRef imageRef = CGImageCreateWithImageInRect([largerImage CGImage], cropRect);
UIImage *image = [UIImage imageWithCGImage: imageRef];
CGImageRelease(imageRef);
[imageArray addObject: UIImageJPEGRepresentation(image, 1.0)];
NSLog(@"Added image %d", i);
}
NSLog(@"Final size %d", (int)[imageArray count]);
return imageArray;
}
但是,由于调用了 UIImageJPEGRepresentation
,这非常慢,如果我只是将 UIImage
直接添加到数组中,速度会更快,但是当我在用户擦洗时执行此操作通过数组中的图像,它开始分配大量内存,迫使应用程序最终崩溃。如果有帮助,它会调用 [UIImageView setImage:];
。对此的任何帮助将不胜感激。
ED|T:CGImageCreateWithImageInRect 可能会保留导致它占用大量内存的“largerImage”
最佳答案
从本质上讲,您的目标似乎是随机向用户显示图像的特定部分。
如果您只想显示图像的较小部分,则不必创建较小的图像。特别是如果大图像可以立即加载到内存中。而是尝试 View 裁剪来调整图像的可见部分。
例如,你可以试试这个。
UIImageView
和 sizeToFit
。UIView
中。UIView
的框架设置为较小的图像尺寸。UIView
的
clipsToBounds
设置为 YES
。UIImageView
的transform
来控制可见部分。这与您对 UIScrollView
所做的基本相同,除了通过用户交互自动滚动。
这是一个代码示例。
- (void)viewDidLoad {
[super viewDidLoad];
UIImageView* v1 = [[UIImageView alloc] init];
[v1 setImage:[UIImage imageWithContentsOfFile:@"large-image.png"]];
[v1 sizeToFit];
UIView* v2 = [[UIView alloc] init];
[v2 setFrame:CGRectMake(0, 0, 100, 100)];
[v2 addSubview:v1];
[v2 setClipsToBounds:YES];
// Set transform later to adjust visible portion.
v1.transform = CGAffineTransformMakeTranslation(-100, -100);
[self.view addSubview:v2];
}
关于ios - imageWithCGImage 的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24727599/
所以这就是要点我有一个程序,它有一个由许多小图像组成的大图像,它获取该图像并将其分成许多较小的图像(如电影的帧),然后用户可以去擦洗通过。 我目前使用的是这种方法 - (NSMutableArray
我想将 Assets 中的所有照片保存到某个文件夹中。通过以下方式循环执行此操作: ALAssetRepresentation *representation = [asset defaultRepr
当我仅在主线程 iref 上执行以下操作时立即自动释放: -(void)loadImage:(ALAsset*)asset{ @autoreleasepool { ALAsse
我正在尝试在核心图中创建一个带有渐变的条形图。我有以下代码: UIImage *img = [UIImage imageNamed:@"orange_bar_graph"]; CPTImage *im
我正在使用位桶生成 UIImages,动态创建它们并交换 UIImageView 的图像。有没有办法直接编辑UIImageView的图像? (即,更改特定像素的颜色,而不从 UIImageView 中
我为 4.x 构建了一个应用程序,应该为所有 iPhone 3.0-4.x 部署。我意识到 imageWithCGImage:scale:orientation 方法仅在 4.0 及更高版本中可用。
由于我需要沿着 iPad 的所有 4 个侧面放置图像,我假设我可以使用其中一种方法将图像的方向相对于相应的侧面“向上”。 我对 iOS 比较陌生,但我通读了 Apple 文档。因为 Apple 文档似
我是一名优秀的程序员,十分优秀!