2014-01-20 2 views
0

Я написал этот метод, чтобы изменить размер изображения и сохранить его в файл:уменьшенного изображения не рисуется правильно растровым

- (BOOL) saveImage: (NSImage*) image withSize: (NSSize) size type: (NSBitmapImageFileType) type toURL: (NSURL*) URL { 
    NSImage* outputImage= [[NSImage alloc]initWithSize: size]; 
    NSBitmapImageRep* bitmap= [[NSBitmapImageRep alloc]initWithBitmapDataPlanes: NULL pixelsWide: size.width pixelsHigh: size.height bitsPerSample:8 samplesPerPixel:4 hasAlpha: type==NSPNGFileType isPlanar: NO colorSpaceName: NSCalibratedRGBColorSpace bytesPerRow:0 bitsPerPixel:0]; 
    [outputImage addRepresentation: bitmap]; 
    [image lockFocusOnRepresentation: bitmap]; 
    [image drawInRect: NSMakeRect(0, 0, size.width, size.height) fromRect: NSZeroRect operation: NSCompositeCopy fraction: 1.0]; 
    [image unlockFocus]; 
    NSDictionary* properties= type==NSJPEGFileType? @{NSImageCompressionFactor : @1.0} : @{}; 
    NSData* outputData= [bitmap representationUsingType: type properties: properties]; 
    return [outputData writeToURL: URL atomically: YES]; 
} 

Таким образом, изображение должно быть обращено внутрь растрового изображения, который изменяет размер, масштабирование его поместиться. Если я использую этот метод для изменения размера и сохранения изображения, я получаю файл с правильным размером, но это пустой образ. Что не так с этим кодом?

ответ

1
- (BOOL) saveImage:(NSImage*)image 
      withSize:(NSSize) size 
       type:(NSBitmapImageFileType) type 
      toURL:(NSURL*) URL 
{ 
    NSImage *smallImage = [[NSImage alloc] initWithSize:size]; 
    [smallImage lockFocus]; 
    [image setSize:size]; 
    [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; 
    [image drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, size.width, size.height) operation:NSCompositeCopy fraction:1.0]; 
    [smallImage unlockFocus]; 

    NSData *outputData= [smallImage TIFFRepresentation]; 
    NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:outputData]; 
    NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:0.9] forKey:NSImageCompressionFactor]; 
    outputData = [imageRep representationUsingType:NSPNGFileType properties:imageProps]; 
    return [outputData writeToURL:URL atomically:YES]; 
} 
Смежные вопросы