1

重複の可能性:
回転したUIImageViewの迅速で汚いアンチエイリアシング手法はありますか?

iPhoneとアプリでUIImageViewの角度を変更したかったので、次のコードを使用しました。

previewImg.transform = CGAffineTransformMakeRotation(atan2(y2-y1,x2-x1));

私はそれを動作させました、そして画像は下にあります。

ここに画像の説明を入力してください

画像では、画像のエッジが滑らかではありません。エッジを滑らかにする方法はありますか?

4

1 に答える 1

3

これは以前に尋ねられました。ここでこの投稿を確認してください。回転したUIImageViewの迅速で汚いアンチエイリアシング手法はありますか?

そうは言っても、最適な解決策は、画像の周囲に1pxの透明な境界線を作成することです。

更新UIImage:ここから参照される、に透明な境界線を追加するヘル​​パーメソッドは次のとおりです:http: //vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

- (UIImage *)transparentBorderImage:(NSUInteger)borderSize {
// If the image does not have an alpha layer, add one
UIImage *image = [self imageWithAlpha];

CGRect newRect = CGRectMake(0, 0, image.size.width + borderSize * 2, image.size.height + borderSize * 2);

// Build a context that's the same dimensions as the new size
CGContextRef bitmap = CGBitmapContextCreate(NULL,
                                            newRect.size.width,
                                            newRect.size.height,
                                            CGImageGetBitsPerComponent(self.CGImage),
                                            0,
                                            CGImageGetColorSpace(self.CGImage),
                                            CGImageGetBitmapInfo(self.CGImage));

// Draw the image in the center of the context, leaving a gap around the edges
CGRect imageLocation = CGRectMake(borderSize, borderSize, image.size.width, image.size.height);
CGContextDrawImage(bitmap, imageLocation, self.CGImage);
CGImageRef borderImageRef = CGBitmapContextCreateImage(bitmap);

// Create a mask to make the border transparent, and combine it with the image
CGImageRef maskImageRef = [self newBorderMask:borderSize size:newRect.size];
CGImageRef transparentBorderImageRef = CGImageCreateWithMask(borderImageRef, maskImageRef);
UIImage *transparentBorderImage = [UIImage imageWithCGImage:transparentBorderImageRef];

// Clean up
CGContextRelease(bitmap);
CGImageRelease(borderImageRef);
CGImageRelease(maskImageRef);
CGImageRelease(transparentBorderImageRef);

return transparentBorderImage;
}
于 2012-06-11T11:05:27.793 に答える