菜鸟教程小白 发表于 2022-12-12 23:48:26

ios - imageWithCGImage 的内存问题


                                            <p><p>所以这里的要点是我有一个程序,它有一个由许多小图像组成的大图像,它获取这个图像并将它分成许多较小的图像(如电影的帧),然后用户可以去擦洗通过。</p>

<p>我目前使用这种方法</p>

<pre><code>- (NSMutableArray *)createArrayFromImage: (NSData *)largerImageData
{
    UIImage *largerImage = ;
    int arraySize = (int)largerImage.size.height/largerImage.size.width; //Find out how many images there are
    NSMutableArray *imageArray = [ init];
    for (int i = 0; i &lt; arraySize; i++) {

      CGRect cropRect = CGRectMake(0, largerImage.size.width * i, largerImage.size.width, largerImage.size.width);
      CGImageRef imageRef = CGImageCreateWithImageInRect(, cropRect);
      UIImage *image = ;
      CGImageRelease(imageRef);

      ;
      NSLog(@&#34;Added image %d&#34;, i);
    }

    NSLog(@&#34;Final size %d&#34;, (int));
    return imageArray;
}
</code></pre>

<p>但是,由于 <code>UIImageJPEGRepresentation</code> 被调用,这非常慢,如果我只是将 <code>UIImage</code> 直接添加到数组中,但是当我在用户擦洗时执行此操作时会快得多通过数组中的图像,它开始分配大量内存,迫使应用程序最终崩溃。如果有帮助,它会调用 <code>;</code>。对此的任何帮助将不胜感激。</p>

<p>ED|T:CGImageCreateWithImageInRect 可能会保留“largerImage”,这会导致它占用大量内存</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>基本上,您的目标似乎是随机向用户显示图像的特定部分。 </p>

<p>如果您只想显示图像的较小部分,则不必创建较小的图像。特别是如果大图像可以立即加载到内存中。
而是尝试使用 View 剪辑来调整图像的可见部分。</p>

<p>例如,你可以试试这个。</p>

<ol>
<li>将大图设置为 <code>UIImageView</code> 和 <code>sizeToFit</code>。</li>
<li>将 ImageView 放在 <code>UIView</code> 中。</li>
<li>将<code>UIView</code>的frame设置为小图片。</li>
<li><code>clipsToBounds</code> 将外部 <code>UIView</code> 改为 <code>YES</code>。</li>
<li>调整内部<code>UIImageView</code>的<code>transform</code>控制可见部分。</li>
</ol>

<p>这与您对 <code>UIScrollView</code> 所做的操作基本相同,只是通过用户交互自动滚动。</p>

<p>这是一个代码示例。</p>

<pre><code>- (void)viewDidLoad {
    ;

    UIImageView*    v1=   [ init];
    ];
    ;

    UIView* v2=   [ init];
    ;
    ;
    ;

    // Set transform later to adjust visible portion.
    v1.transform    =   CGAffineTransformMakeTranslation(-100, -100);

    ;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - imageWithCGImage 的内存问题,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/24727599/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/24727599/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - imageWithCGImage 的内存问题