2011-06-30 2 views
2

はここで見つける:https://github.com/jverkoey/ObjQREncoderkCAFilterNearestのmaginifcationフィルタ(UIImageView)

は基本的に、私はこの著者によってサンプルコードを見て、彼はQRコードを作成するときには、無ピクセレーションと完全に出てきます。ライブラリが提供する画像自体は33 x 33ピクセルですが、kCAFilterNearestを使用して拡大表示し、非常に明瞭にします(ピクセル化なし)。ここでは彼のコードは次のとおりです。

UIImage* image = [QREncoder encode:@"http://www.google.com/"]; 

    UIImageView* imageView = [[UIImageView alloc] initWithImage:image]; 
    CGFloat qrSize = self.view.bounds.size.width - kPadding * 2; 
    imageView.frame = CGRectMake(kPadding, (self.view.bounds.size.height - qrSize)/2, 
    qrSize, qrSize); 
    [imageView layer].magnificationFilter = kCAFilterNearest; 

    [self.view addSubview:imageView]; 

私はXIBでUIImageViewを持っている、と私はそれがこのようなイメージです設定しています:

[[template imageVQRCode] setImage:[QREncoder encode:ticketNum]]; 
[[[template imageVQRCode] layer] setMagnificationFilter:kCAFilterNearest]; 

が、QRコードは実際にぼやけています。この例では、クリスタルクリアが出ます。 何が間違っていますか? ありがとう!

更新:私は、スケーリングやkCAFFilterNearestとは関係がないことを知りました。これは、ビューからPNG画像を生成することと関係しています。ここは、それはそれは私が(QRCodes品質に注意してください)PNG表現にUIViewのを保存するときにどのように見えるか対deiveにどのように見えるかです:

enter image description here

UPDATE 2:これは私がPNGファイルを生成しています方法ですUIViewから:

UIGraphicsBeginImageContextWithOptions([[template view] bounds].size, YES, 0.0); 
    [[[template view] layer] renderInContext:UIGraphicsGetCurrentContext()]; 
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    [UIImagePNGRepresentation(viewImage) writeToFile:plistPath atomically:YES]; 
+0

これは少し明確にする必要があると思います。ビュー内のQRコードの表示や、そのビューから作成したPNGファイルの表示に関係していますか? – Corin

+0

返信いただきありがとうございます。問題は、生成されたPNGファイルです。基本的に、あなたが見ることができるように、シミュレータ上のビュー内のQRコードは、生成されたPNGよりもはるかに鮮明で明瞭です。私は元の質問を、私がPNG画像を生成するために使用しているコードで更新しました。 – sumderungHAY

答えて

0

私は以下の画像編集機能を使用しました。

- (UIImage *)resizedImage:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality 
{ 
    BOOL drawTransposed; 

    switch (self.imageOrientation) { 
     case UIImageOrientationLeft: 
     case UIImageOrientationLeftMirrored: 
     case UIImageOrientationRight: 
     case UIImageOrientationRightMirrored: 
      drawTransposed = YES; 
      break; 

     default: 
      drawTransposed = NO; 
    } 

    return [self resizedImage:newSize 
        transform:[self transformForOrientation:newSize] 
       drawTransposed:drawTransposed 
     interpolationQuality:quality]; 

} 

- (UIImage *)resizedImage:(CGSize)newSize 
       transform:(CGAffineTransform)transform 
      drawTransposed:(BOOL)transpose 
    interpolationQuality:(CGInterpolationQuality)quality 
{ 

    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height)); 
    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width); 
    CGImageRef imageRef = self.CGImage; 

    // Build a context that's the same dimensions as the new size 
    CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef); 
    if((bitmapInfo == kCGImageAlphaLast) || (bitmapInfo == kCGImageAlphaNone)) 
     bitmapInfo = kCGImageAlphaNoneSkipLast; 

    CGContextRef bitmap = CGBitmapContextCreate(NULL, 
               newRect.size.width, 
               newRect.size.height, 
               CGImageGetBitsPerComponent(imageRef), 
               0, 
               CGImageGetColorSpace(imageRef), 
               bitmapInfo); 

    // Rotate and/or flip the image if required by its orientation 
    CGContextConcatCTM(bitmap, transform); 

    // Set the quality level to use when rescaling 
    CGContextSetInterpolationQuality(bitmap, quality); 

    // Draw into the context; this scales the image 
    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef); 

    // Get the resized image from the context and a UIImage 
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap); 
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; 

    // Clean up 
    CGContextRelease(bitmap); 
    CGImageRelease(newImageRef); 

    return newImage; 

} 


UIImageWriteToSavedPhotosAlbum([image resizedImage:CGSizeMake(300, 300) interpolationQuality:kCGInterpolationNone], nil, nil, nil); 

あなたが助けを必要としているかどうかを私に教えてください。

enter image description here

+0

'((bitmapInfo == kCGImageAlphaLast)||(bitmapInfo == kCGImageAlphaNone))行の' bitmapInfo = kCGImageAlphaNoneSkipLast; '、なぜ' CGBitmapInfo'変数と 'CGImageAlphaInfo'値を比較しますか?それは私に警告を与える。 – Hlung