Изменение размера изображения в Core Graphics - PullRequest
5 голосов
/ 28 апреля 2011

Я пытаюсь изменить размер 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 Ответ

4 голосов
/ 28 апреля 2011

Проблема в том, что вы создаете контекст того же размера, что и изображение. Вы хотите сделать контекст новым размером. И тогда отсечение не нужно.

Попробуйте это:

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);

Я на самом деле не тестировал его, но он должен, по крайней мере, дать вам представление о том, что нужно изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...