Вопрос

Так что я пытаюсь удалить альфа-канал с изображения.Я подумал, что попробую циколорматрикс.Теперь вот дело.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 имеет нелепы генеракодицетагкод, например, приблизительно генеракодицетагкод.Я не пытался переместить его, чтобы посмотреть, правильно ли фактическое изображение.

Никто знает, почему это происходит, и как это исправить?

Это было полезно?

Решение

Хорошо, я думаю, что я понял это.Видимо, для некоторых фильтров не редкость бесконечно продлить генеракодицетагкод.Решение для этого должно делать

CGRect origExtent = ciImage.extent;
.

к вашему оригинальному генеракодичению, выполните фильтры (установка extent, чтобы быть результатом каждый раз), а затем вызовите

ciImage = [ciImage imageByCroppingToRect:origExtent];
.

непосредственно перед получением вашего конечного генеракодицетагкода или что-то еще.

Другие советы

Для удаления альфа-канала правильный фильтр - это цветной зажим, устанавливающий диапазон альфа-значений до 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