gpt4 book ai didi

c# - 从另一个线程将 UIImage 保存为 png

转载 作者:行者123 更新时间:2023-11-30 14:37:35 24 4
gpt4 key购买 nike

代码非常简单,它必须从设置文件加载所有现有图像引用,将它们缩放到 250x250 并用另一个名称保存它们。

问题是在设备上(在 iPhone 3g 和 iPad 上测试过)它会在一段时间后崩溃并出现内存警告。在模拟器上它运行完美。

我有一个 UIViewController,它在 ViewDidAppear 上有这段代码:

ThreadPool.QueueUserWorkItem( delegate{ 
make_thumbs();
});

make_thumbs 函数是:

void make_thumbs() 
{
using( var ns = new NSAutoreleasePool() )
{
foreach( var c in Settings.Instance.Categories )
{
for( var i = 0; i < c.Pictures.Count; i++ )
{
//this is the existing bundled image path
string path = c.Pictures[i].PicturePath;
string folder = Environment.GetFolderPath( Environment.SpecialFolder.Personal );
//this is the destination image file name
string filename = Path.Combine( folder, c.Name + i + ".png");
if( !File.Exists( filename ) )
{
NSError err;
using(UIImage img = UIImage.FromFile( path ).Scale( 250,250 ))
{
img.AsPNG().Save( filename, true, out err );
}
}
}
}
}
}

最佳答案

你需要扩展我的建议(来自 mailing-list )对于在你的循环中实现 IDisposable 的所有东西(因为它可以比分配内存更快GC 将能够收集它)。

正如@Rolf 所说,在评论中,img.AsPNG() 返回一个NSData,它实现了IDisposable

同样调用Scale方法也会返回一个新的UIImage

 using(UIImage img = UIImage.FromFile( path )) {
using (var scaled_img = img.Scale( 250,250 )) {
using (var data = img.AsPNG ()) {
data.Save( filename, true, out err );
}
}
}

这应该涵盖这个 block ,即确保尽快回收所有内存,这应该有助于您的设备(它们中没有很多可用内存)。

关于c# - 从另一个线程将 UIImage 保存为 png,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076876/

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