문제

그래서 이미지에서 알파 채널을 제거하려고 합니다.나는 CIColorMatrix를 시도해 볼 것이라고 생각했습니다.자, 여기에 문제가 있습니다. filter 이전에 (성공적으로) 적용된 필터입니다.다음 코드는 생각한 대로 작동합니다.

ciImage = [filter valueForKey:kCIOutputImageKey];
filter = [CIFilter filterWithName:@"CIColorMatrix"];
[filter setValue:ciImage forKey:kCIInputImageKey];
[filter setValue:[CIVector vectorWithX:1 Y:0 Z:0 W:0] forKey:@"inputRVector"];
[filter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"];
[filter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"];
[filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0.75] forKey:@"inputAVector"];
[filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0.0] forKey:@"inputBiasVector"];
image = [UIImage imageWithCIImage:[filter valueForKey:kCIOutputImageKey]];

알파에 0.75를 곱합니다.그러나 알파 바이어스를 0.01만큼 변경하면 다음과 같습니다.

[filter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:0.01] forKey:@"inputBiasVector"];

결과 CIImage는 터무니없다. extent, 대략적으로 (-1.7e38, -1.7e38), (3.4e38 x 3.4e38).실제 이미지가 맞는지 확인하기 위해 위치를 옮겨보진 않았습니다.

왜 이런 일이 발생하는지, 해결 방법을 아는 사람이 있나요?

도움이 되었습니까?

해결책

알았어, 알아낸 것 같아.분명히 일부 필터가 extent 무한히.그에 대한 해결책은 다음과 같습니다

CGRect origExtent = ciImage.extent;

당신의 원본에 ciImage, 필터를 수행합니다(설정 ciImage 매번 결과가 되도록) 그런 다음 전화를 겁니다.

ciImage = [ciImage imageByCroppingToRect:origExtent];

최종 합격 직전 UIImage 또는 무엇이든.

다른 팁

알파 채널을 제거하려면 올바른 필터는 알파 값 범위를 1..1로 설정하고 다른 색의 채널을 0..1 :

로 설정하는 색상 클램프입니다.
    CIFilter *clamp = [CIFilter filterWithName:@"CIColorClamp"];
    [clamp setValue:ciImage forKey:kCIInputImageKey];
    [clamp setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputMinComponents"];
    [clamp setValue:[CIVector vectorWithX:1 Y:1 Z:1 W:1] forKey:@"inputMaxComponents"];
    image = [clamp valueForKey:kCIOutputImageKey];
.

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