检查从NINetworkImageView返回的UIImage是否有效

时间:2011-11-30 18:17:38

标签: iphone ios uiimage nimbus-ios

所以我打电话使用Nimbus的NINetworkImageView对象从照片服务器中提取图像。我需要检查返回的对象是否有效。如果它无效,则方法

- (void) networkImageView:(NINetworkImageView *) imageView didLoadImage:(UIImage *) image {

返回透明的UIImage对象。我认为这个方法给我一个带有清晰像素的jpg图像,这导致了我的问题。我已经尝试了以下检查以查看图像是否透明而没有运气(下面的所有尝试都发生在上述方法的范围内):

尝试失败1:

UIImageView *tempView = [[UIImageView alloc] initWithImage:image]; 
if(tempView.alpha != 0.0f)
{   
    //the image is a valid (nonclear) image
}
else
{
     //the image is invalid (clear)
}

尝试失败2:

CGImageRef cgref = [[UIImage alloc] CGImage];
CIImage *cim = [[UIImage alloc] CIImage];

if(!([image CIImage] == cim && [image CGImage] == cgref))
{   
     //the image is a valid (nonclear) image
}
else
{
     //the image is invalid (clear)
}

尝试失败3:

if(image)
{   
     //the image is a valid (nonclear) image
}
else
{
     //the image is invalid (clear)
}

尝试失败4:

CGImageRef cgref = [image CGImage];
CIImage *cim = [image CIImage];

if(cim == nil && cgref == NULL)
{         
    //the image is invalid (clear)  
}
else
{
    //the image is a valid (nonclear) image
}

修改

我能够从模拟器中提取“无效图像”。 networkimageview方法返回一个完全白色的jpg图像。但是,在模拟器中,它显示为一幅清晰的画面,思绪?

2 个答案:

答案 0 :(得分:1)

我可以建议将此图像保存到磁盘,并在Photoshop /其他图形工具中查看它的alpha值。

UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);

现在您可以在照片应用中找到此图片。

以下函数将名称为image.png文件的UIImage保存在用户文档文件夹中:

- (void)saveImage: (UIImage*)image
{
    if (image != nil)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                      NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                       [NSString stringWithString: @"test.png"] ];
        NSData* data = UIImagePNGRepresentation(image);
        [data writeToFile:path atomically:YES];
    }
}

答案 1 :(得分:0)

我找到了修复程序。使用Beryllium的建议我下载了jpg图像,然后将其添加到XCODE项目中。我把它命名为BlankImage.jpg并添加它。然后我做了以下比较

- (void) networkImageView:(NINetworkImageView *) imageView didLoadImage:(UIImage *) image 
{

    if([ UIImageJPEGRepresentation([UIImage imageNamed:@"BlankImage.JPG"], 1.0f ) isEqualToData: UIImageJPEGRepresentation(image, 1.0f ) ])
    {
           //This is a blank image so handle that case
    }
    else
    {
           //This is a valid image
    }
}

另一种选择是逐像素比较做疯狂的石英材料。这很好用。