나는이 시간 동안 내 머리를 긁적 거리고 있습니다.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);
문제없이 작동하지만 이미지는 하나뿐입니다. I는 예를 들어, 다시이 메소드를 호출 할 경우 image1.size
및 image2.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로 조정하고 싶습니다.
이 방법을 다시 호출하면 두 번째 이미지가 잘못됩니다. 종이에 물 얼룩 같은 픽셀을 엉망으로 만든다는 잘못된 것입니다. 때로는 심지어 인식 할 수 없게 렌더링됩니다.
제가 누락되었습니다. 매우 여기에 분명한 사항이 있습니까? 나는 free(bytes);
을 시도했다. 나는 여기에서 필요하지 않다고 생각한다. 그러나 노력하기 위해, 그러나 그것은 아직도 아무것도 가져 오지 않는다. 메서드를 호출 할 때 두 번째로 오래된 바이트 데이터가 계속 유지되도록 올바르게 해제하거나 해제하지 않습니까? 나는 여기서 추측하고있다. ARC를 사용하고 있습니다. 희망이 도움이 될 것입니다
감사합니다. 그러나 위의 방법이 왜 잘못되었는지 계속 알고 싶습니다. +1, 좋은 깨끗한 방법을 공유하기 위해, 그러나. – Unheilig
@Unheilig, 코드와 UIGraphicsEndImageContext() 앞에 UIGraphicsBeginImageContext (<# CGSize size #>)를 넣으십시오. 당신의 코드 다음에. 그것은 내가 관심이 있다면 작동 말해 : –
피드백 : 덕분에 많은 팁,하지만 그것을 해결하지 않습니다. – Unheilig