0

このコードで取得したファイルからアルバム アートワークのサイズを変更する必要があります。

for (NSString *format in [asset availableMetadataFormats]) {
        for (AVMetadataItem *item in [asset metadataForFormat:format]) {
            if ([[item commonKey] isEqualToString:@"title"]) {
                //NSLog(@"name: %@", (NSString *)[item value]);
                downloadedCell.nameLabel.text = (NSString *)[item value];

            }
            if ([[item commonKey] isEqualToString:@"artist"]) {
                downloadedCell.artistLabel.text = (NSString *)[item value];
            }
            if ([[item commonKey] isEqualToString:@"albumName"]) {
                //musicItem.strAlbumName = (NSString *)[item value];
            }
            if ([[item commonKey] isEqualToString:@"artwork"]) {
                UIImage *img = nil;
                if ([item.keySpace isEqualToString:AVMetadataKeySpaceiTunes]) {
                    img = [UIImage imageWithData:[item.value copyWithZone:nil]];
                }
                else { // if ([item.keySpace isEqualToString:AVMetadataKeySpaceID3]) {
                    NSData *data = [(NSDictionary *)[item value] objectForKey:@"data"];
                    img = [UIImage imageWithData:data];

                }
                // musicItem.imgArtwork = img;
                UIImage *newImage = [self resizeImage:img width:70.0f height:70.0f];
                downloadedCell.artworkImage.image = newImage;

            }

この方法を適用すると:

- (UIImage *)resizeImage:(UIImage *)image width:(int)width height:(int)height {
    //NSLog(@"resizing");
    CGImageRef imageRef = [image CGImage];
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

    //if (alphaInfo == kCGImageAlphaNone)
    alphaInfo = kCGImageAlphaNoneSkipLast;

    CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef),
                                                4 * width, CGImageGetColorSpace(imageRef), alphaInfo);
    CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
    CGImageRef ref = CGBitmapContextCreateImage(bitmap);
    UIImage *result = [UIImage imageWithCGImage:ref];

    CGContextRelease(bitmap);
    CGImageRelease(ref);

    return result; 
}

上の写真でわかるように、常にノイズ画像が表示されます。 http://postimage.org/image/jltpfza11/

より良い解像度の画像を取得するにはどうすればよいですか?

4

2 に答える 2

0

以下を使用して、コンテキストの補間レベルを明示的に指定してみてください。

CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh);

したがって、 resizeImage:width:height: メソッドは次のようになります。

-(UIImage *)resizeImage:(UIImage *)image width:(int)width height:(int)height {
   //NSLog(@"resizing");
   CGImageRef imageRef = [image CGImage];
   CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(imageRef);

   //if (alphaInfo == kCGImageAlphaNone)
   alphaInfo = kCGImageAlphaNoneSkipLast;

   CGContextRef bitmap = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(imageRef),
                                            4 * width, CGImageGetColorSpace(imageRef), alphaInfo);
   CGContextSetInterpolationQuality(bitmap, kCGInterpolationHigh);
   CGContextDrawImage(bitmap, CGRectMake(0, 0, width, height), imageRef);
   CGImageRef ref = CGBitmapContextCreateImage(bitmap);
   UIImage *result = [UIImage imageWithCGImage:ref];

   CGContextRelease(bitmap);
   CGImageRelease(ref);

   return result;

}

于 2013-01-13T17:44:11.790 に答える
0

ビューが 74x74 の場合、Retina ディスプレイの 2 倍にサイズ変更する必要があります。したがって、次のようなものです:

CGFloat imageSize = 74.0f * [[UIScreen mainScreen] scale];
UIImage *newImage = [self resizeImage:img width:imageSize height:imageSize];

次に、画像ビューの contentMode を UIViewContentModeScaleAspectFill のようなものに設定する必要があります。

于 2013-01-13T18:58:53.197 に答える