0

そこで、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画像を返します。しかし、シミュレーターでは、それは明確な画像として表示されます、考え?

4

2 に答える 2

1

この画像をディスクに保存し、Photoshop/別のグラフィック ツールでアルファ値を確認することをお勧めします。

UIImageWriteToSavedPhotosAlbum(image, nil, nil, NULL);

これで、写真アプリでこの画像を見つけることができます。

次の関数は、UIImage をimage.pngファイル名でユーザーの Document フォルダーに保存します。

- (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];
    }
}
于 2011-11-30T18:35:48.423 に答える
0

私は修正を見つけました。ベリリウムの提案を使用して、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
    }
}

他のオプションは、ピクセルごとの比較のためにクレイジーなクォーツを行うことでした. これはうまくいきました。

于 2011-12-01T16:59:55.643 に答える