uiimagePnGrePresentation은 cifilter 후에 nil을 반환합니다
-
21-12-2019 - |
문제
CiaffinetRansform으로 회전 한 후 UiImage에 대한 PNG 표현을 얻는 문제로 실행됩니다.첫째, 시계 방향으로 이미지를 90도 회전시키는 UIImage에 범주가 있습니다.uiimageView에 회전 된 이미지를 표시 할 때 올바르게 작동하는 것 같습니다.
-(UIImage *)cwRotatedRepresentation
{
// Not very precise, stop yelling at me.
CGAffineTransform xfrm=CGAffineTransformMakeRotation(-(6.28 / 4.0));
CIContext *context=[CIContext contextWithOptions:nil];
CIImage *inputImage=[CIImage imageWithCGImage:self.CGImage];
CIFilter *filter=[CIFilter filterWithName:@"CIAffineTransform"];
[filter setValue:inputImage forKey:@"inputImage"];
[filter setValue:[NSValue valueWithBytes:&xfrm objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"];
CIImage *result=[filter valueForKey:@"outputImage"];
CGImageRef cgImage=[context createCGImage:result fromRect:[inputImage extent]];
return [[UIImage alloc] initWithCIImage:result];
.
}
그러나 실제로 새로 회전 된 이미지에 대해 PNG를 실제로 얻으려고 할 때 uiimagePngRePresentation이 NIL을 반환합니다.
-(NSData *)getPNG
{
UIImage *myImg=[UIImage imageNamed:@"canada"];
myImg=[myImg cwRotatedRepresentation];
NSData *d=UIImagePNGRepresentation(myImg);
// d == nil :(
return d;
}
.
는 PNG 헤더를 덮어 쓰는 코어 이미지입니까?이 행동에 대한 방식이 있거나, 시계 방향으로 90도 회전 된 UIImage의 PNG 표현의 원하는 결과를 얻는 더 좋은 방법이 있습니까?
해결책
소리 지르지 만 -m_pi_4는 최대 정밀도로 원하는 상수를 제공합니다.)
이미지가 알려지지 않는 한 [InputImage Extent] 대신 [결과 범위] 대신 [결과 범위] 대신 [결과 범위]를 사용하고 싶습니다.
어떻게 해당 uiimagePnGrepresentation이 실패 할 수 있는지 모르겠습니다.하나의 다른 생각 ... CGImage를 만들고 UIImage에서 CIImage를 사용하여 initwithcgimage를 사용하여 더 나은 결과를 제공합니다.
제휴하지 않습니다 StackOverflow