तो, पारदर्शी करने के लिए एक सफेद को बदलने के लिए हम इस विधि का उपयोग कर सकते हैं:
-(UIImage *)changeWhiteColorTransparent: (UIImage *)image {
CGImageRef rawImageRef=image.CGImage;
const float colorMasking[6] = {222, 255, 222, 255, 222, 255};
UIGraphicsBeginImageContext(image.size);
CGImageRef maskedImageRef=CGImageCreateWithMaskingColors(rawImageRef, colorMasking);
{
//if in iphone
CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, image.size.height);
CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
}
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height), maskedImageRef);
UIImage *result = UIGraphicsGetImageFromCurrentImageContext();
CGImageRelease(maskedImageRef);
UIGraphicsEndImageContext();
return result;
}
और काले के साथ गैर पारदर्शी पिक्सेल को बदलने के लिए, हम उपयोग कर सकते हैं:
- (UIImage *) changeColor: (UIImage *)image {
UIGraphicsBeginImageContext(image.size);
CGRect contextRect;
contextRect.origin.x = 0.0f;
contextRect.origin.y = 0.0f;
contextRect.size = [image size];
// Retrieve source image and begin image context
CGSize itemImageSize = [image size];
CGPoint itemImagePosition;
itemImagePosition.x = ceilf((contextRect.size.width - itemImageSize.width)/2);
itemImagePosition.y = ceilf((contextRect.size.height - itemImageSize.height));
UIGraphicsBeginImageContext(contextRect.size);
CGContextRef c = UIGraphicsGetCurrentContext();
// Setup shadow
// Setup transparency layer and clip to mask
CGContextBeginTransparencyLayer(c, NULL);
CGContextScaleCTM(c, 1.0, -1.0);
CGContextClipToMask(c, CGRectMake(itemImagePosition.x, -itemImagePosition.y, itemImageSize.width, -itemImageSize.height), [image CGImage]);
CGContextSetFillColorWithColor(c, [UIColor blackColor].CGColor);
contextRect.size.height = -contextRect.size.height;
contextRect.size.height -= 15;
// Fill and end the transparency layer
CGContextFillRect(c, contextRect);
CGContextEndTransparencyLayer(c);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
इतना अभ्यास इस में होगा:
-(UIImage *)silhouetteForImage:(UIImage *)img {
return [self changeColour:[self changeWhiteColorTransparent:img]];
}
स्पष्ट रूप से आप इसे सब कुछ चलाने के लिए पृष्ठभूमि थ्रेड में कॉल करेंगे जी सुचारू रूप से।
स्रोत
2013-01-27 22:56:15
@ [ब्रैड लार्सन] (http://stackoverflow.com/users/19679/brad-larson) कहां है जब आपको उसकी ज़रूरत है! –
GPUImageAlphaBlendFilter के आधार पर एक कस्टम फ़िल्टर बनाने का प्रयास करें, केवल लाल चैनल ('textureColor.r') के साथ अंतिम मिश्रण ऑपरेशन में अल्फा चैनल (' textureColor.a') को प्रतिस्थापित करें। यदि आपने इस छवि को खिलाने से पहले अपनी छवि को चमक में परिवर्तित कर दिया है, तो मेरा मानना है कि पहली छवि के चमक के आधार पर चुनिंदा मिश्रण होना चाहिए। आप जिस प्रभाव को चाहते हैं उसे प्राप्त करने के लिए आपको मिश्रण आदेश को ट्विक करने की आवश्यकता हो सकती है। –
आपके समय के लिए बहुत बहुत धन्यवाद! दुर्भाग्य से, ऐप अब क्रैश हो रहा है। स्पष्ट होने के लिए, क्या यह रेखा आप का जिक्र कर रही है: gl_FragColor = vec4 (मिश्रण (textureColor.rgb, textureColor2.rgb, textureColor2.a * mixPercent), textureColor.a); मैं केवल लाल रंग में कैसे पास करूं? मैंने जो कुछ भी कोशिश की, वह एक दुर्घटनाग्रस्त हो गया: में सम्मिलन विफलता - [GPUImageAlphaBlendFilter initWithVertexShaderFromString: fragmentShaderFromString:] –