0

IKImageView から画像を回転させようとしています。しかし、回転して保存した後、解像度の低い画像が得られました。
以下は、回転に使用しているコードです

-(NSImage *)imageRotated:(float)degrees{
    degrees = fmod(degrees, 360.);
    if(0 == degrees){
        return self;
    }
    NSSize size = [self size];
    NSSize maxSize;
    if(90. == degrees || 270. == degrees || -90== degrees || -270. == degrees){
        maxSize = NSMakeSize(size.height, size.width);
    }else if (180. == degrees || -180. == degrees){
        maxSize = size;
    }else{
        maxSize = NSMakeSize(20+MAX(size.width, size.height), 20+MAX(size.width, size.height));
    }

    NSAffineTransform *rot = [NSAffineTransform transform];
    [rot rotateByDegrees:degrees];
    NSAffineTransform *center = [ NSAffineTransform transform];
    [center translateXBy:maxSize.width/2 yBy:maxSize.height/2];
    [rot appendTransform:center];
    NSImage *image = [[NSImage alloc]init];
    image = [NSImage imageWithSize:maxSize flipped:NO drawingHandler:^BOOL(NSRect desRect){
            [rot concat];
            NSRect rect = NSMakeRect(0, 0, size.width, size.height);
            NSPoint corner = NSMakePoint(-size.width/2, -size.height/2);
            [self drawAtPoint:corner fromRect:rect operation:NSCompositeCopy fraction:1.0];
        return YES;
    }];
    return image;
}


次に、以下のコードで画像をビットマップに変換しました

- (NSBitmapImageRep *)bitmapImageRepresentation{
    int width = [self size].width;
    int height = [self size].height;

    if(width <1 || height < 1)
        return nil;

    NSBitmapImageRep *rep = [[NSBitmapImageRep alloc]
                             initWithBitmapDataPlanes:NULL
                             pixelsWide:width
                             pixelsHigh:height
                             bitsPerSample:8
                             samplesPerPixel:4
                             hasAlpha:YES
                             isPlanar:NO
                             colorSpaceName:NSDeviceRGBColorSpace
                             bytesPerRow:width*4
                             bitsPerPixel:32];

    NSGraphicsContext *ctx = [NSGraphicsContext graphicsContextWithBitmapImageRep:rep];
    [NSGraphicsContext saveGraphicsState];
    [NSGraphicsContext setCurrentContext:ctx];
    [self drawAtPoint:NSZeroPoint fromRect:NSZeroRect operation:NSCompositeCopy fraction:1.0];
    [ctx flushGraphics];
    [NSGraphicsContext restoreGraphicsState];
    return rep;
}


以下のコードを使用して NSData に変換し、ファイルに書き込みます

- (NSData*)toNSData{
    NSImage *imgTemp = [[NSImage alloc]initWithSize:NSMakeSize(self.size.width*2, self.size.height*2)];
    imgTemp = self;
    NSBitmapImageRep *bmprep = [imgTemp bitmapImageRepresentation];
    NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:1.0] forKey:NSImageCurrentFrame];
    NSData *pngData = [[NSData alloc]init];
    pngData = [bmprep representationUsingType:NSPNGFileType properties:imageProps];
    return pngData;
}

保存後の画像の解像度が低くなる理由を教えてください。
私は MacBook Pro (Retina、13 インチ、Mid 2014) を使用し
ています。よろしくお願いします :)

4

1 に答える 1