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);
}
。
コードが不十分だと思われるコードを表示できますか? – johnluttig
私は自分のコードを与えてくれました。応答に全力を尽くすのに役立つことを願っています。 @johnluttig –
iPadとiPhoneのバージョンの違いを示す画像を投稿できますか?色空間の問題かもしれないし、まったく別のものかもしれない。 – user1118321