[ALAsset thumbnail]
ギャラリー内のほとんどの写真で、サムネイルの内側に黒い半透明の境界線が表示されることがわかりました。
私の質問は、この境界線なしでサムネイルを取得するにはどうすればよいですか?
[ALAsset thumbnail]
ギャラリー内のほとんどの写真で、サムネイルの内側に黒い半透明の境界線が表示されることがわかりました。
私の質問は、この境界線なしでサムネイルを取得するにはどうすればよいですか?
多くのオプションがあります。画面に表示する必要があるだけの場合は、サムネイルの 1 ピクセルが表示されないように偽装することができます。境界にクリップする UIView 内に UIImageView を配置できます。
UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
view.backgroundColor = [UIColor clearColor];
view.clipsToBounds = YES;
UIImageView* imgView = [[UIImageView alloc] initWithFrame:CGRectMake(-1, -1, 202, 202)];
imgView.image = [asset thumbnail];
[view addSubview:imgView];
または、さらに良いことに、UIView サブクラスを作成し、drawRect をオーバーライドします。
-(void)drawRect:(CGRect)rect
{
UIImage* thumb = [asset thumbnail];
[thumb drawInRect:CGRectMake(rect.origin.x-1, rect.origin.y-1, rect.size.width+2, rect.size.height+2)];
}
または、aspectRatioThumbnail を代わりに使用して、自分で二乗することもできます。
UIImageView* imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
imgView.image = [asset aspectRatioThumbnail];
imgView.contentMode = UIViewContentModeScaleAspectFill;
または、何らかの理由で実際に UIImage 自体を切り取る必要がある場合は、これを行うことができます。
UIImage* thumb = [asset thumbnail];
CGRect cropRect = CGRectMake(1, 1, thumb.size.width-2, thumb.size.height-2);
cropRect = CGRectMake(cropRect.origin.x*thumb.scale, cropRect.origin.y*thumb.scale, cropRect.size.height*cropRect.scale);
CGImageRef imageRef = CGImageCreateWithImageInRect([thumb CGImage], cropRect);
UIImage* result = [UIImage imageWithCGImage:imageRef scale:thumb.scale orientation:thumb.imageOrientation];
CGImageRelease(imageRef);