我的iPhone应用程序占用了太多内存

nao0811ta

我使用UICollectionView制作了图库应用,但如下所示的分配效果不佳。

在此处输入图片说明

我找不到哪里不好。我应该在哪里显式释放对象?请让我知道。

以下代码对此表示怀疑。

在collectionView中,

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
...
dispatch_async(all_queue, ^{
    ALAssetRepresentation *representation = [asset defaultRepresentation];
    UIImage *image = [UIImage imageWithCGImage:[representation fullResolutionImage]
                                         scale:[representation scale]
                                   orientation:(UIImageOrientation)[representation orientation]];
    NSString *filename = [representation filename];
    NSLog(@"%@", filename);
    NSLog(@"Loaded Image row : %d", indexPath.row);

    vector<cv::Rect> faces = [ImageUtils findFeature:image minsize:MIN_FACE_SIZE
                                         withCascade:face_cascade];

    Mat imageMat = [ImageUtils cvMatFromUIImage:image];
    for(unsigned int i = 0; i < es.size(); ++i) {
        rectangle(imageMat, cv::Point(es[i].x, es[i].y),
                  cv::Point(es[i].x + es[i].width, es[i].y + es[i].height),
                  cv::Scalar(0,255,255),5);
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        [faceImage setImage:[ImageUtils UIImageFromCVMat:imageMat]];
        [cell setNeedsDisplay];
    });
});
return cell;
}

调用方法

+ (cv::Mat)cvMatFromUIImage:(UIImage *)image
{
CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
CGFloat cols = image.size.width;
CGFloat rows = image.size.height;

cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)

CGContextRef contextRef = CGBitmapContextCreate(cvMat.data,                 // Pointer to  data
                                                cols,                       // Width of bitmap
                                                rows,                       // Height of bitmap
                                                8,                          // Bits per component
                                                cvMat.step[0],              // Bytes per row
                                                colorSpace,                 // Colorspace
                                                kCGImageAlphaNoneSkipLast |
                                                kCGBitmapByteOrderDefault); // Bitmap info flags

CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows), image.CGImage);
CGContextRelease(contextRef);
CGColorSpaceRelease(colorSpace);

return cvMat;
}

另一种方法

+ (UIImage *)UIImageFromCVMat:(cv::Mat)cvMat
{
NSData *data = [NSData dataWithBytes:cvMat.data length:cvMat.elemSize()*cvMat.total()];
CGColorSpaceRef colorSpace;

if (cvMat.elemSize() == 1) {
    colorSpace = CGColorSpaceCreateDeviceGray();
} else {
    colorSpace = CGColorSpaceCreateDeviceRGB();
}

CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);

// Creating CGImage from cv::Mat
CGImageRef imageRef = CGImageCreate(cvMat.cols,                                 //width
                                    cvMat.rows,                                 //height
                                    8,                                          //bits per component
                                    8 * cvMat.elemSize(),                       //bits per pixel
                                    cvMat.step[0],                            //bytesPerRow
                                    colorSpace,                                 //colorspace
                                    kCGImageAlphaNone|kCGBitmapByteOrderDefault,// bitmap info
                                    provider,                                   //CGDataProviderRef
                                    NULL,                                       //decode
                                    false,                                      //should interpolate
                                    kCGRenderingIntentDefault                   //intent
                                    );


// Getting UIImage from CGImage
UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
CGImageRelease(imageRef);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorSpace);

return finalImage;
}

另一种方法

+(cv::vector<cv::Rect>)findFeature:(UIImage *)image minsize:(cv::Size)minSize withCascade:(CascadeClassifier)cascade
{
vector<cv::Rect> faces;
Mat frame_gray;
Mat imageMat = [ImageUtils cvMatFromUIImage:image];

cvtColor(imageMat, frame_gray, CV_BGRA2GRAY);
equalizeHist(frame_gray, frame_gray);

cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, minSize);
frame_gray.release();
imageMat.release();

return faces;
}
蜂蜜

这是因为您的UImage分辨率太高。您必须找到一种减小其尺寸的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我的iPhone应用程序占用了太多内存

来自分类Dev

我的PHP zip函数占用了太多内存

来自分类Dev

为什么我的应用程序占用大量内存?

来自分类Dev

我的Android应用程序与庞大的MS Access数据库的Ucanaccess连接占用了Android设备太多的堆空间。还有其他选择吗?

来自分类Dev

为什么我的Android应用占用太多内存?

来自分类Dev

iPhone应用程序在添加图像并加载到uiwebview中时会占用大量内存

来自分类Dev

从文档加载本体花费太多时间,并占用了我所有的内存空间

来自分类Dev

我的应用程序占用的内存随着时间的推移而不断增加

来自分类Dev

我的应用程序消耗太多内存,有时用 java.lang.OutOfMemoryError 关闭:

来自分类Dev

Jenkins 似乎在 CentOS 中占用了太多内存

来自分类Dev

如何找出程序占用了多少内存

来自分类Dev

如何找出程序占用了多少内存

来自分类Dev

从 18.10 升级到 19.04 后,`tracker-extract` 占用了太多内存,它冻结了我的机器

来自分类Dev

检查是否为iPhone应用程序启用了推送

来自分类Dev

编写多部分内容时,为什么我的应用程序的内存占用量会爆炸

来自分类Dev

Python占用太多内存

来自分类Dev

XPages应用程序占用了服务器上的所有硬盘空间

来自分类Dev

iPhone应用程序由于内存压力而崩溃

来自分类Dev

iPhone应用程序内存泄漏与NSMutableArray中的UIImages

来自分类Dev

iPhone应用程序由于内存压力而崩溃

来自分类Dev

我的应用程序使用了哪些PHP模块

来自分类Dev

我如何找出哪个应用程序禁用了睡眠?

来自分类Dev

所以我禁用了应用程序信息服务

来自分类Dev

我的应用程序使用了哪些PHP模块

来自分类Dev

如何占用内存来测试另一个应用程序?

来自分类Dev

Odoo-多个数据库的应用程序内存占用量

来自分类Dev

更新UIImageView占用太多内存

来自分类Dev

结构数组占用太多内存

来自分类Dev

CSV解析占用太多内存

Related 相关文章

  1. 1

    我的iPhone应用程序占用了太多内存

  2. 2

    我的PHP zip函数占用了太多内存

  3. 3

    为什么我的应用程序占用大量内存?

  4. 4

    我的Android应用程序与庞大的MS Access数据库的Ucanaccess连接占用了Android设备太多的堆空间。还有其他选择吗?

  5. 5

    为什么我的Android应用占用太多内存?

  6. 6

    iPhone应用程序在添加图像并加载到uiwebview中时会占用大量内存

  7. 7

    从文档加载本体花费太多时间,并占用了我所有的内存空间

  8. 8

    我的应用程序占用的内存随着时间的推移而不断增加

  9. 9

    我的应用程序消耗太多内存,有时用 java.lang.OutOfMemoryError 关闭:

  10. 10

    Jenkins 似乎在 CentOS 中占用了太多内存

  11. 11

    如何找出程序占用了多少内存

  12. 12

    如何找出程序占用了多少内存

  13. 13

    从 18.10 升级到 19.04 后,`tracker-extract` 占用了太多内存,它冻结了我的机器

  14. 14

    检查是否为iPhone应用程序启用了推送

  15. 15

    编写多部分内容时,为什么我的应用程序的内存占用量会爆炸

  16. 16

    Python占用太多内存

  17. 17

    XPages应用程序占用了服务器上的所有硬盘空间

  18. 18

    iPhone应用程序由于内存压力而崩溃

  19. 19

    iPhone应用程序内存泄漏与NSMutableArray中的UIImages

  20. 20

    iPhone应用程序由于内存压力而崩溃

  21. 21

    我的应用程序使用了哪些PHP模块

  22. 22

    我如何找出哪个应用程序禁用了睡眠?

  23. 23

    所以我禁用了应用程序信息服务

  24. 24

    我的应用程序使用了哪些PHP模块

  25. 25

    如何占用内存来测试另一个应用程序?

  26. 26

    Odoo-多个数据库的应用程序内存占用量

  27. 27

    更新UIImageView占用太多内存

  28. 28

    结构数组占用太多内存

  29. 29

    CSV解析占用太多内存

热门标签

归档