9
我有一個與iPhone中的pdf繪圖相關的問題。當我在ipad中繪製pdf時,它工作正常,但在iphone的圖像質量不好。該圖像在灰色背景處包含黑點。
任何人都可以幫我解決這個問題嗎?保留圖像質量,同時將高分辨率pdf格式導入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);
}
。
您能向我們展示您認爲不足的代碼嗎? – johnluttig 2011-12-28 07:27:07
我已經給出了我的代碼,我希望這將有助於完整答覆。 @johnluttig – 2011-12-28 11:15:39
你能張貼一張圖片來展示iPad和iPhone版本之間的區別嗎?這可能是一個色彩空間問題,也可能是其他問題。 – user1118321 2012-01-03 06:50:20