相关疑难解决方法(0)

在iOS中加载非延迟图像

我正在尝试在后台线程中加载UIImages,然后在iPad上显示它们.但是,当我将imageViews的视图属性设置为图像时,会出现断断续续的情况.我很快发现iOS上的图像加载是懒惰的,并且在这个问题中找到了部分解决方案:

在UI线程上懒洋洋地加载CGImage/UIImage会导致口吃

这实际上会强制图像加载到线程中,但在显示图像时仍然存在断断续续的情况.

你可以在这里找到我的示例项目:http://www.jasamer.com/files/SwapTest.zip(编辑:修复版),检查SwapTestViewController.尝试拖动图片以查看口吃.

我创建的测试代码是断断续续的(forceLoad方法是我从上面发布的堆栈溢出问题中获取的方法):

NSArray* imagePaths = [NSArray arrayWithObjects:
                       [[NSBundle mainBundle] pathForResource: @"a.png" ofType: nil], 
                       [[NSBundle mainBundle] pathForResource: @"b.png" ofType: nil], nil];

NSOperationQueue* queue = [[NSOperationQueue alloc] init];

[queue addOperationWithBlock: ^(void) {
    int imageIndex = 0;
    while (true) {
        UIImage* image = [[UIImage alloc] initWithContentsOfFile: [imagePaths objectAtIndex: imageIndex]];
        imageIndex = (imageIndex+1)%2;
        [image forceLoad];

        //What's missing here?

        [self performSelectorOnMainThread: @selector(setImage:) withObject: image waitUntilDone: YES];
        [image release];
    }
}];
Run Code Online (Sandbox Code Playgroud)

我知道可以避免口吃的原因有两个:

(1)Apple可以在照片应用中加载图像而不会出现断断续续的情况

(2)在上述代码的此修改版本中,placeholder1和placeholder2已显示一次后,此代码不会导致断断续续:

    UIImage* placeholder1 = …
Run Code Online (Sandbox Code Playgroud)

objective-c ios

39
推荐指数
3
解决办法
2万
查看次数

为什么我的图像的每行字节数超过其每像素的字节数乘以其宽度?

我正在将图像转换为MOV文件,并且有一件有趣的事情发生在我身上.我记录了每个颜色分量的位数,每个像素的位数和每行的字节数.这是我的代码:

NSLog(@"Image width: %d, Height: %d", CGImageGetWidth(image), CGImageGetHeight(image));
NSLog(@"BPC: %d \ BPP: %d \ ByPR: %d", CGImageGetBitsPerComponent(image), CGImageGetBitsPerPixel(image), CGImageGetBytesPerRow(image));
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

图像宽度:300,高度:300(一切都如预期的那样)BPC:8(每种颜色8位......到目前为止很好)BPP:32(32 = 4个组件ARGB*每个颜色8位......得到它)ByPR :1216(每行300 px*每像素4个字节=每行1200个字节)

为什么我每行记录1216个字节,而不是1200?顺便说一句,这不仅仅是一个侥幸.当我根据缓冲区大小的数字创建视频时,它可以工作.当我用每行1200字节创建它时,我得到一些混乱的混叠效果.

思考?

video uiimage cgimage ios

12
推荐指数
1
解决办法
2736
查看次数

我们应该使用哪个CGImageAlphaInfo?

石英2D节目指南定义了各种α-存储模式的可用性:

在此输入图像描述

我们应该将哪些用于RGB上下文,为什么

对于非不透明的上下文,kCGImageAlphaPremultipliedFirstkCGImageAlphaPremultipliedLast

对于不透明的上下文,kCGImageAlphaNoneSkipFirst还是kCGImageAlphaNoneSkipLast

价值的选择是否会影响绩效?

通常,我会看到kCGImageAlphaPremultipliedFirst非透明和kCGImageAlphaNoneSkipFirst不透明的上下文.有些人说这些表现更好,但我没有看到任何关于此的确凿证据或文件.

快速搜索GitHub的显示,开发商的青睐kCGImageAlphaPremultipliedFirstkCGImageAlphaPremultipliedLastkCGImageAlphaNoneSkipLast超过kCGImageAlphaNoneSkipFirst.可悲的是,这只不过是轶事证据.

macos performance core-graphics alpha-transparency ios

11
推荐指数
1
解决办法
4408
查看次数