私はこれについて何時間も頭を悩ませてきました。
次の方法を使用して、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);
問題なく動作しますが、画像は 1 つしかありません。たとえば、このメソッドを再度呼び出すと、次のようになります。
[self resizeImageWithSize:imageSize]; //this is OK.
[self resizeImageWithSize:imageSize]; //this would not come out right
ここで、画像サイズは と によって決まりimage1.size
ますimage2.size
。メソッドの呼び出しシーケンスを反転しようとしましたが、最初のものは常に正しいです。
それらは大きすぎず、400 x 300、300 x 360 です。そして、1 つを 200 x 200 に、もう 1 つを 150 x 150 にサイズ変更したいと思います。これらは単なる png です。
動作しますが、このメソッドをもう一度呼び出すと、2 番目のイメージが間違っています。間違っているのは、紙の水の染みのようにピクセルが台無しになっていることです。場合によっては、認識できなくなることさえあります。
ここで非常に明白な何かが欠けていますか? 私はしようとしfree(bytes);
ましたが、ここでは必要ないと思いますが、試してみるためですが、それでも何ももたらされません。メソッドが2回目に呼び出されたときに古いバイトデータが引き続き保持されるように、何かを正しく解放/解放していませんか? 私はここで推測しています。ARCを使用しています。