سؤال

لذلك أحاول إزالة قناة ألفا من الصورة.اعتقدت أنني سأحاول 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, ، قم بعمل المرشحات (setting 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