NSBitmapImageRep调整大小

时间:2012-08-21 07:58:55

标签: objective-c macos image bitmap resize

有没有办法调整NSBitmapImageRep的大小?

我找到了方法setPixel:atX:y:,但我不确定它在做什么。 Maby这是我需要的吗?

如果不是,那我该怎么办呢?

我需要在将图像写入文件之前调整图像大小,我的图像会显示在NSBitmapImageRep中。如果更容易调整大小,我可以将其转换为NSImageCIImage。如果是,那就告诉我。

顺便说一句,我需要能够在不保持任何比例的情况下调整图像大小。例如,如果图像是3200x2000,我需要能够将其大小调整为100x100大小。我该怎么办?

2 个答案:

答案 0 :(得分:0)

您应该使用正确插入源的实现。

您可以使用CGBitmapContext目标尺寸(例如3200x3200)和规格来完成此操作,然后将源图像图像绘制到CGBitmapContext。然后,您可以使用CGBitmapContext的图像创建功能,也可以使用上下文的位图缓冲区作为输出样本。

答案 1 :(得分:0)

编辑您可以使用以下功能调整图片大小而不保持任何比例:

- (NSImage *)imageResize:(NSImage*)anImage
         newSize:(NSSize)newSize 
{
 NSImage *sourceImage = anImage;
 [sourceImage setScalesWhenResized:YES];

 // Report an error if the source isn't a valid image
 if (![sourceImage isValid])
 {
    NSLog(@"Invalid Image");
 } else
 {
    NSImage *smallImage = [[[NSImage alloc] initWithSize: newSize] autorelease];
    [smallImage lockFocus];
    [sourceImage setSize: newSize];
    [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
    [sourceImage compositeToPoint:NSZeroPoint operation:NSCompositeCopy];
    [smallImage unlockFocus];
    return smallImage;
 }
 return nil;
}

其次是这样保持比例:

NSData *imageData = [yourImg  TIFFRepresentation]; // converting img into data
NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData]; // converting into BitmapImageRep 
NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:0.9] forKey:NSImageCompressionFactor]; // any number betwwen 0 to 1
imageData = [imageRep representationUsingType:NSJPEGFileType properties:imageProps]; // use NSPNGFileType if needed
NSImage *resizedImage = [[NSImage alloc] initWithData:imageData]; // image created from data