调整核心图形中的图像大小

时间:2011-04-27 23:13:32

标签: iphone image resize core-graphics

我正在尝试调整CGImageRef的大小,以便我可以在屏幕上绘制我想要的大小。 所以我有这个代码:

CGColorSpaceRef colorspace = CGImageGetColorSpace(originalImage);

CGContextRef context = CGBitmapContextCreate(NULL,
                                             CGImageGetWidth(originalImage),
                                             CGImageGetHeight(originalImage),
                                             CGImageGetBitsPerComponent(originalImage),
                                             CGImageGetBytesPerRow(originalImage),
                                             colorspace,
                                             CGImageGetAlphaInfo(originalImage));

if(context == NULL)
    return nil;

CGRect clippedRect = CGRectMake(CGContextGetClipBoundingBox(context).origin.x,
                                CGContextGetClipBoundingBox(context).origin.y,
                                toWidth,
                                toHeight);
CGContextClipToRect(context, clippedRect);

// draw image to context
CGContextDrawImage(context, clippedRect, originalImage);

// extract resulting image from context
CGImageRef imgRef = CGBitmapContextCreateImage(context);

所以这段代码允许我显然将图像绘制到我想要的尺寸,这很好。 问题是我得到的实际图像一旦调整大小,即使它看起来在屏幕上调整大小它实际上没有调整大小。当我这样做时:

CGImageGetWidth(imgRef);

它实际上返回了图像的原始宽度,而不是我在屏幕上看到的宽度。

那么我怎样才能真正创建一个实际调整大小的图像,而不仅仅是绘制我想要的正确尺寸?

由于

1 个答案:

答案 0 :(得分:4)

问题是您正在创建与图像大小相同的上下文。您希望将上下文设置为新大小。然后裁剪是不必要的。

试试这个:

CGColorSpaceRef colorspace = CGImageGetColorSpace(originalImage);

CGContextRef context = CGBitmapContextCreate(NULL,
                                             toWidth, // Changed this
                                             toHeight, // Changed this
                                             CGImageGetBitsPerComponent(originalImage),
                                             CGImageGetBytesPerRow(originalImage)/CGImageGetWidth(originalImage)*toWidth, // Changed this
                                             colorspace,
                                             CGImageGetAlphaInfo(originalImage));

if(context == NULL)
    return nil;

// Removed clipping code

// draw image to context
CGContextDrawImage(context, CGContextGetClipBoundingBox(context), originalImage);

// extract resulting image from context
CGImageRef imgRef = CGBitmapContextCreateImage(context);

我实际上没有对它进行测试,但它至少应该让你知道需要改变什么。