2011-12-28 18 views
9

Tengo un problema relacionado con el dibujo pdf en iPhone. Cuando dibujo el pdf en el iPad funciona bien, pero en el iPhone la calidad de la imagen de la página no es buena. Esa imagen contiene manchas oscuras en el lugar del fondo gris.
¿Alguien me puede ayudar a resolver este problema?conservando la calidad de imagen mientras dibuja el pdf de alta resolución en el iPhone?

gracias.

- (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

¿Podría mostrarnos su código que cree que es inadecuado? – johnluttig

+1

he dado mi código y espero que sea de ayuda completa gracias por responder. @johnluttig –

+1

¿Puedes publicar una imagen que muestre la diferencia entre las versiones de iPad y iPhone? Puede ser un problema de espacio de color, o podría ser algo completamente diferente. – user1118321

Respuesta

5

Simplemente es una suposición descabellada, ya que es difícil de decir sin algunas capturas de pantalla reales, pero no utiliza CGContextSetInterpolationQuality en su código de procesamiento. Tal vez CGContextSetInterpolationQuality(your_context, kCGInterpolationHigh) soluciona el problema.

+0

gracias, funcionó para mí. @ Roman –

Cuestiones relacionadas