0

私はこれについて何時間も頭を悩ませてきました。

次の方法を使用して、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を使用しています。

4

1 に答える 1