J'essaye de faire pivoter une image depuis IKImageView. Mais après la rotation et l'enregistrement, j'ai obtenu une image de plus basse résolution.
ci-dessous est le code que j'utilise pour faire tournerEnregistrer l'image après l'avoir fait pivoter. Mais l'image a une résolution plus faible après l'enregistrement
-(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;
}
puis, je me suis converti l'image bitmap par le code ci-dessous
- (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;
}
et je ci-dessous le code pour convertir NSData, puis écrire fichier
- (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;
}
Pourriez-vous me montrer la raison pour laquelle l'image après l'enregistrement a une résolution inférieure?
J'utilise MacBook Pro (Retina, 13 pouces, mi 2014)
Merci beaucoup à l'avance :)
Quel est le problème? L'image après sauvegarde est pivotée. N'est-ce pas ce que tu veux? – FightOn
@FightOn: Bonjour, merci pour vos commentaires à l'avance. J'ai mis à jour ma question à nouveau. Pourriez-vous m'aider à vérifier à nouveau? – NextTrang