Проверьте, действительно ли UIImage, возвращенный из NINetworkImageView - PullRequest
0 голосов
/ 30 ноября 2011

Итак, я звоню, чтобы вытащить изображение с сервера фотографий с помощью объекта NINetworkImageView от Nimbus. Мне нужно проверить, верен ли возвращенный объект. Если он недействителен, метод

- (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 ]

1 голос
/ 30 ноября 2011

Я могу посоветовать сохранить это изображение на диск и посмотреть его альфа-значение в Photoshop / другом графическом инструменте.

UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);

Теперь вы можете найти это изображение в приложении Photos.Следующая функция сохраняет UIImage с именем image.png файл в пользовательской папке документа:

- (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];
    }
}
0 голосов
/ 01 декабря 2011

Я нашел исправление.Используя предложение Бериллиума, я скачал изображение 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
    }
}

Другой вариант заключался в том, чтобы делать сумасшедшие кварцевые вещи для попиксельного сравнения.Это работало просто отлично.

...