сохранение качества изображения при рисовании pdf высокого разрешения на iphone?

У меня проблема, связанная с рисованием pdf в iPhone. Когда я рисую pdf в ipad, он работает нормально, но в iphone качество изображения страницы не очень хорошее. Это изображение содержит темные пятна на месте серого фона.
Кто-нибудь может помочь мне решить эту проблему?

спасибо.

- (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);
}

.

9
задан tjarratt 4 January 2012 в 12:26
поделиться