web-dev-qa-db-ja.com

UIImage、画像が含まれているかどうかを確認

このようなUIImageをインスタンス化した場合:

UIImage *image = [[UIImage alloc] init];

オブジェクトは作成されますが、画像は含まれていません。

オブジェクトに画像が含まれているかどうかを確認するにはどうすればよいですか?

30
Jonathan

画像データがあるか確認できます。

UIImage* image = [[UIImage alloc] init];

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

if (cim == nil && cgref == NULL)
{
    NSLog(@"no underlying data");
}
[image release];
67
Kreiri

Swift 3で、cgImageまたはciImageを確認します

public extension UIImage {

  public var hasContent: Bool {
    return cgImage != nil || ciImage != nil
  }
}

CGImage:UIImageオブジェクトがCIImageオブジェクトを使用して初期化された場合、プロパティの値はNULLです。

CIImage:UIImageオブジェクトがCGImageRefを使用して初期化された場合、プロパティの値はnilです。

11
onmyway133

これは@Kreiriの更新バージョンで、メソッドを追加して論理エラーを修正しました。

- (BOOL)containsImage:(UIImage*)image {
    BOOL result = NO;

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

    if (cim != nil || cgref != NULL) { // contains image
        result = YES;
    }

    return result;
}

UIImageは、CGImageRefまたはCIImageのみに基づくことができます。両方がnilの場合、画像がないことを意味します。 Giveメソッドの使用例:

if (![self containsImage:imageview.image]) {
    [self setImageWithYourMethod];
}

それが誰かを助けることを願っています。

0
mgyky

Null値が含まれているCGImageRef自体をチェックすると、UIImageオブジェクトに画像が含まれていないことを意味します。