iOS: неверный результат с CGBitmapContextCreate при вызове метода

Я почесал голову над этим часами.

Я использую следующий метод, чтобы изменить размер 2 изображения. Один за другим:

CGImageRef imageReference = [image CGImage];
bytes = malloc(width * height * 4); 

NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(bytes, width, height, bitsPerComponent,
                                bytesPerRow, colorSpaceReference,
                                kCGImageAlphaPremultipliedLast);

CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageReference); 
CGImageRelease(imageReference);
CGContextRelease(context);

Работает нормально, без проблем - только одно изображение. Если я вызову этот метод снова, например:

[self resizeImageWithSize:imageSize];  //this is OK.
[self resizeImageWithSize:imageSize]; //this would not come out right

где размер изображения определяется: image1.size а также image2.size, Я попытался перевернуть вызывающую последовательность методов, первый всегда корректен.

Они не слишком большие, 400 х 300, 300 х 360. И я просто хотел бы изменить размер одного до 200 х 200, а другой, например, 150 х 150. И это просто png.

Это работает, но если я вызову этот метод снова, второе изображение будет неправильным. Неправильно, что это испортило пиксели как пятна воды на бумаге. Иногда это даже становится неузнаваемым.

Я что-то здесь упускаю? Я пытался free(bytes); что я не думаю, что здесь нужно, но ради попыток, но все же это ничего не приносит. Правильно ли я освобождаю / освобождаю что-то, чтобы во второй раз при вызове метода старые байтовые данные сохранялись? Я просто догадываюсь здесь. Использую ARC.

1 ответ

Я использую этот метод, и он работает как шарм, надеюсь, это поможет:

- (UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)newSize
{
    UIImage *newImage = nil;

    UIGraphicsBeginImageContextWithOptions(newSize, YES, 0.0);
    [image drawInRect:CGRectMake(0.0,
                                 0.0,
                                 newSize.width,
                                 newSize.height)];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return newImage;

}
Другие вопросы по тегам