Düzensiz şekilli bir maskeye dayanarak iOS'ta bir resmi kırpmak istiyorum. Bunu nasıl yapabilirim?Bir resmi düzensiz şekle göre nasıl kırpırım?
8
A
cevap
3
Kesmek istediğinizden emin değilim, ancak bunun yerine resmi maskelemek istiyorsunuz. Bu oldukça kolaydır, ancak sonunda bazı görüntüler için değil başkaları için çalıştığını görürsünüz. Bunun nedeni, görüntüde uygun alfa kanalına sahip olmanız gerektiğidir.
Burada kullandığım kod, stackoverflow'tan aldığım kod. (Problem with transparency when converting UIView to UIImage)
CGImageRef CopyImageAndAddAlphaChannel(CGImageRef sourceImage) {
CGImageRef retVal = NULL;
size_t width = CGImageGetWidth(sourceImage);
size_t height = CGImageGetHeight(sourceImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef offscreenContext = CGBitmapContextCreate(NULL, width, height,
8, 0, colorSpace, kCGImageAlphaPremultipliedFirst);
if (offscreenContext != NULL) {
CGContextDrawImage(offscreenContext, CGRectMake(0, 0, width, height), sourceImage);
retVal = CGBitmapContextCreateImage(offscreenContext);
CGContextRelease(offscreenContext);
}
CGColorSpaceRelease(colorSpace);
return retVal;
}
- (UIImage*)maskImage:(UIImage *)image withMask:(UIImage *)maskImage {
CGImageRef maskRef = maskImage.CGImage;
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef), NULL, false);
CGImageRef sourceImage = [image CGImage];
CGImageRef imageWithAlpha = sourceImage;
//add alpha channel for images that don't have one (ie GIF, JPEG, etc...)
//this however has a computational cost
// needed to comment out this check. Some images were reporting that they
// had an alpha channel when they didn't! So we always create the channel.
// It isn't expected that the wheelin application will be doing this a lot so
// the computational cost isn't onerous.
//if (CGImageGetAlphaInfo(sourceImage) == kCGImageAlphaNone) {
imageWithAlpha = CopyImageAndAddAlphaChannel(sourceImage);
//}
CGImageRef masked = CGImageCreateWithMask(imageWithAlpha, mask);
CGImageRelease(mask);
//release imageWithAlpha if it was created by CopyImageAndAddAlphaChannel
if (sourceImage != imageWithAlpha) {
CGImageRelease(imageWithAlpha);
}
UIImage* retImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
return retImage;
}
Ve böyle diyoruz:
customImage = [customImage maskImage:customImage withMask:[UIImage imageNamed:@"CircularMask.png"]];
Bu durumda, ben dairesel resim yapması için bir genelge maske kullanıyorum. İhtiyaçlarınıza uygun düzensiz maskeyi yapmanız gerekir.
İlgili konular
- 1. Bir resmi dikdörtgen olmayan bir şekle nasıl programlayabilirim?
- 2. Delphi - "yerinde" bir bitmap'i nasıl kırpırım?
- 3. JQuery Linkify eklentisini kullanırken, URL'yi nasıl kırpırım?
- 4. Silverlight TextBlock'ta bir dizeyi elips ile nasıl kırpırım?
- 5. Bir İşlev için Düzensiz Genişletilebilir Kaydın Geçirilmesi
- 6. OpenCV Düzensiz Şekilde Centroid
- 7. Bir resmi nasıl döndürürüm?
- 8. Javascript - Resmi seçerek imaja göre değiştir
- 9. Bir şekle x ekseni çizgisi nasıl eklenir? (matlab)
- 10. Beyaz renkli resmi belirli bir renge göre değiştirin
- 11. Highstock - düzensiz zaman aralığı
- 12. gulp düzensiz şekilde öldürülür
- 13. Düzensiz Şekilli Şeffaf CALayer'ı iPhone'da Nasıl Koyuyorsunuz?
- 14. Vaatler ve düzensiz geri aramalar
- 15. Django hata e-postası çok uzun. Bunu nasıl kırpırım?
- 16. Qt'deki bir resmi nasıl kırpabilirim?
- 17. Bir döndürücünün resmi nasıl değiştirilir
- 18. Terminalde bir resmi nasıl görüntüleyebilirim?
- 19. Bir resmi diğerine nasıl yerleştirebilirim?
- 20. Varolan bir MATLAB çizimini başka bir şekle çizme
- 21. Popover düzensiz şekilde yeniden boyutlandırılıyor
- 22. Bir resmi nasıl yükler ve bu resmi (üretimde) gönderiyorsunuz?
- 23. Html Resmi görüntünün resmi
- 24. svg/canvas kullanarak düzensiz/elle çizilmiş çizgi nasıl çizilir?
- 25. Bir tensörün tensorflow'da başka bir şekle uyması için nasıl açıkça yayınlanır?
- 26. Düzensiz satır biçimli .csv okuma
- 27. Resmi, üst div boyutuna göre resmiyetle yeniden boyutlandırma
- 28. Bir SVG yol öğesini bir tıklama komutunda başka bir şekle dönüştürme nasıl yapılır?
- 29. Farklı tıklama durumlarıyla düzensiz şekilli ImageButton oluşturma
- 30. sadece bir sütun resmi
Tekrarınız için teşekkürler, ama benim sorunum başka.bir trapezoid gibi bir 4 farklı nokta var.Kullanıcı da bu noktayı değiştirebilir ve şekil kendi stilidir.Şimdi kullanıcı tarafından oluşturduğu aynı şekil gibi kırpmak istiyorum sürüklenme noktası –
4 noktayı alıp maskeye dönüştürür ve sonra yukarıdaki kodu kullanabilir misiniz? –
Üzgünüz, IOS geliştirmede yeniyim.Konumunuzu anlayamıyorum. Örneğin yukarıdaki kodun dört noktalı CGPoint firstPoint, secondPoint, thirdPoint ve fourtPoint'i var. Daha sonra yukarıdaki kodu kullanıyorum Teşekkürler –