2011-12-28 14 views
9

iPhoneのPDF図面に関する問題があります。 ipadでpdfを描画するとうまくいきますが、ページのイメージのiphoneの品質は良くありません。その画像には、灰色の背景の場所にダークスポットが含まれています。
誰でもこの問題の解決に手伝ってもらえますか?iphoneに高解像度PDFを描画しながら画質を維持しますか?

ありがとうございました。

- (UIImage *) imageForPageIndex:(NSUInteger)pageIndex { 
    UIImage *image = nil; 
    if ([delegate illustration_Enable]) 
    { 
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
     CGContextRef context = CGBitmapContextCreate(NULL, 
                pageSize.width, 
                pageSize.height, 
                8,      /* bits per component*/ 
                pageSize.width * 4, /* bytes per row */ 
                colorSpace, 
                kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
     CGColorSpaceRelease(colorSpace); 
     CGContextClipToRect(context, CGRectMake(0, 0, pageSize.width, pageSize.height)); 

     [self renderPageAtIndex:pageIndex OnContext:context]; 

     CGImageRef cgimage = CGBitmapContextCreateImage(context); 
     CGContextRelease(context); 
     image = [UIImage imageWithCGImage:cgimage]; 
     CGImageRelease(cgimage); 
    } 
    else 
    { 
     CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
     CGContextRef context = CGBitmapContextCreate(NULL, 
                pageSize.width, 
                pageSize.height, 
                8,      /* bits per component*/ 
                pageSize.width * 4, /* bytes per row */ 
                colorSpace, 
                kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 
     CGColorSpaceRelease(colorSpace); 
     CGContextClipToRect(context, CGRectMake(0, 0, pageSize.width, pageSize.height)); 

     [self renderPageAtIndex:pageIndex OnContext:context]; 


     CGImageRef cgimage = CGBitmapContextCreateImage(context); 
     CGContextRelease(context); 
     image = [UIImage imageWithCGImage:cgimage]; 

     CGImageRelease(cgimage); 
    } 


    return image; 

} 

-(void)renderPageAtIndex:(int)index OnContext:(CGContextRef)ctx{ 

    if ([delegate illustration_Enable]) 
    { 
     if (index-1 == [imageList count]) { 
      return; 
     } 
     UIImage *image = nil; 
     image = [UIImage imageWithContentsOfFile:[imageList objectAtIndex:index-1]]; 
     CGRect rect1 = CGRectMake(0, 0, image.size.width, image.size.height); 
     CGRect rect2 = CGContextGetClipBoundingBox(ctx); 
     CGAffineTransform transform = [self aspectFill:rect1 :rect2]; 
     CGContextConcatCTM(ctx, transform); 
     CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage); 

    } 
    else 
    { 
     CGPDFPageRef page = CGPDFDocumentGetPage(pdf, index); 
     CGRect rect1 = CGPDFPageGetBoxRect(page,kCGPDFMediaBox); 
     CGRect rect2 = CGContextGetClipBoundingBox(ctx); 
     CGAffineTransform transform; 
     if (takeBookmarkImg) 
     { 
      transform = [self aspectFill:rect1 :rect2]; 
     } 
     else 
     { 
      transform = [self aspectFit:rect1 :rect2]; 
     } 
     CGContextConcatCTM(ctx, transform); 
     CGContextDrawPDFPage(ctx, page); 
    } 



} 

- (CGAffineTransform) aspectFit:(CGRect)innerRect :(CGRect) outerRect { 

     scaleFactor = MIN(outerRect.size.width/innerRect.size.width, outerRect.size.height/innerRect.size.height); 
     baseScaleFactor = scaleFactor; 
     CGAffineTransform scale = CGAffineTransformMakeScale(scaleFactor, scaleFactor); 
     CGRect scaledInnerRect = CGRectApplyAffineTransform(innerRect, scale); 

     CGAffineTransform translation = 
     CGAffineTransformMakeTranslation((outerRect.size.width - scaledInnerRect.size.width)/2 - scaledInnerRect.origin.x-(totalMoveX+moveX), 
             (outerRect.size.height - scaledInnerRect.size.height)/2 - scaledInnerRect.origin.y+(totalMoveY+moveY)); 
     return CGAffineTransformConcat(scale, translation); 
} 

+2

コードが不十分だと思われるコードを表示できますか? – johnluttig

+1

私は自分のコードを与えてくれました。応答に全力を尽くすのに役立つことを願っています。 @johnluttig –

+1

iPadとiPhoneのバージョンの違いを示す画像を投稿できますか?色空間の問題かもしれないし、まったく別のものかもしれない。 – user1118321

答えて

5

実際のスクリーンショットがなくても言い表せませんが、レンダリングコードではCGContextSetInterpolationQualityは使用しません。おそらくCGContextSetInterpolationQuality(your_context, kCGInterpolationHigh)が問題を修正します。

+0

それは私のために働いてくれてありがとう@ローマン –

関連する問題