문제

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를 사용하여 더 나은 결과를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top