2014-02-24 48 views
0

我在這幾個小時裏一直在撓頭。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); 

它工作正常,沒問題 - 但只有一個圖像。如果我再次調用該方法,例如:image1.sizeimage2.size

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

其中圖像尺寸由下式確定。我嘗試翻轉方法的調用順序,第一個總是正確的。

它們不是太大,400 x 300,300 x 360.我只是想調整一個到200 x 200和另一個例如150 x 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; 

} 
+0

感謝。但我仍然希望知道爲什麼我的方法是錯誤的。 +1,分享一個不錯的和乾淨的方法,但是。 – Unheilig

+0

@Unheilig,試着在你的代碼和UIGraphicsEndImageContext()之前放置UIGraphicsBeginImageContext(<#CGSize size#>);在你的代碼之後。告訴我,如果它的作品我感興趣:) –

+0

反饋:非常感謝小費,但它並沒有解決它。 – Unheilig

相關問題