我知道你可以用UIImageView做到這一點,但它可以做到UIImage?我希望將UIImageView的動畫圖像數組屬性設置爲具有不同不透明度的相同圖像的數組。思考?如何設置UIImage的不透明度/ alpha值?
回答
我只是需要這樣做,但認爲史蒂文的解決方案會很慢。這應該有希望使用圖形硬件。在UIImage的創建類別:
- (UIImage *)imageByApplyingAlpha:(CGFloat) alpha {
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGRect area = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -area.size.height);
CGContextSetBlendMode(ctx, kCGBlendModeMultiply);
CGContextSetAlpha(ctx, alpha);
CGContextDrawImage(ctx, area, self.CGImage);
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
設置其視圖的不透明度則表現出。
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithName:@"SomeName.png"]];
imageView.alpha = 0.5; //Alpha runs from 0.0 to 1.0
使用該動畫中。您可以在一段時間內更改動畫中的Alpha。
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
//Set alpha
[UIView commitAnimations];
是啊,我想我可能有一個計時器不斷地改變不透明度爲像這樣做,我想這一定是爲動畫圖像數組屬性設置一個數組更容易,因此它可以自己動畫。 – Marty 2011-02-22 22:49:57
您可以使用動畫代理將動畫與'心跳'一起動畫。不要使用定時器,動畫會順利地改變alpha。祝你好運。 – 2011-02-22 22:52:27
這隻適用於開發人員使用UIImageView的情況。這個問題清楚地表明情況並非如此。 – 2014-08-26 20:29:25
我意識到這是相當晚了,但我需要這樣的東西,所以我掀起了一個快速和骯髒的方法來做到這一點。
+ (UIImage *) image:(UIImage *)image withAlpha:(CGFloat)alpha{
// Create a pixel buffer in an easy to use format
CGImageRef imageRef = [image CGImage];
NSUInteger width = CGImageGetWidth(imageRef);
NSUInteger height = CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
UInt8 * m_PixelBuf = malloc(sizeof(UInt8) * height * width * 4);
NSUInteger bytesPerPixel = 4;
NSUInteger bytesPerRow = bytesPerPixel * width;
NSUInteger bitsPerComponent = 8;
CGContextRef context = CGBitmapContextCreate(m_PixelBuf, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
CGContextRelease(context);
//alter the alpha
int length = height * width * 4;
for (int i=0; i<length; i+=4)
{
m_PixelBuf[i+3] = 255*alpha;
}
//create a new image
CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGImageRef newImgRef = CGBitmapContextCreateImage(ctx);
CGColorSpaceRelease(colorSpace);
CGContextRelease(ctx);
free(m_PixelBuf);
UIImage *finalImage = [UIImage imageWithCGImage:newImgRef];
CGImageRelease(newImgRef);
return finalImage;
}
更好的名字將會是'setImage:withAlpha:' – Alexander 2012-05-25 09:59:26
如此真實。感謝提示 – 2012-05-28 04:28:19
集通常指的是屬性,以某種方式改變接收者的狀態。最好命名爲'image:withAlpha:'? – 2012-09-02 19:20:18
有很多簡單的解決方案:
- (UIImage *)tranlucentWithAlpha:(CGFloat)alpha
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
[self drawAtPoint:CGPointZero blendMode:kCGBlendModeNormal alpha:alpha];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
可能應該是被接受的答案。最快/最有效的方法來獲得結果 – 2017-12-14 18:47:31
基於阿列克謝Ishkov的回答,但是在斯威夫特
我用的UIImage類的擴展。
斯威夫特2:
的UIImage擴展:
extension UIImage {
func imageWithAlpha(alpha: CGFloat) -> UIImage {
UIGraphicsBeginImageContextWithOptions(size, false, scale)
drawAtPoint(CGPointZero, blendMode: .Normal, alpha: alpha)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
要使用:
let image = UIImage(named: "my_image")
let transparentImage = image.imageWithAlpha(0.5)
斯威夫特3:
注意,此實現收益一個可選的UIImage。這是因爲在Swift 3中UIGraphicsGetImageFromCurrentImageContext
現在返回一個可選項。如果上下文爲零,或者不使用UIGraphicsBeginImageContext
創建,則此值可能爲零。
的UIImage擴展:
extension UIImage {
func image(alpha: CGFloat) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(size, false, scale)
draw(at: .zero, blendMode: .normal, alpha: alpha)
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage
}
}
要使用:從Xamarin用戶
let image = UIImage(named: "my_image")
let transparentImage = image?.image(alpha: 0.5)
我更喜歡這個'Swift 3'版本。 – AechoLiu 2017-11-03 08:28:28
嘿,嘿,謝謝! :)這裏有雲轉換爲C#
//***************************************************************************
public static class ImageExtensions
//***************************************************************************
{
//-------------------------------------------------------------
public static UIImage WithAlpha(this UIImage image, float alpha)
//-------------------------------------------------------------
{
UIGraphics.BeginImageContextWithOptions(image.Size,false,image.CurrentScale);
image.Draw(CGPoint.Empty, CGBlendMode.Normal, alpha);
var newImage = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return newImage;
}
}
用例:
var MySupaImage = UIImage.FromBundle("opaquestuff.png").WithAlpha(0.15f);
- 1. 如何去除不透明度,但保持UIImage的alpha通道?
- 2. 如何設置UIImage的Alpha?
- 3. Imagick ALPHA VS不透明度
- 4. OpenCV:如何設置一個像素的Alpha透明度
- 5. 如何設置光譜透明度
- 6. Renderscript透明度/ alpha
- 7. 設置不透明度ScrollPane
- 8. 獲取版面的Alpha /不透明度
- 9. R ggplot geom_hex alpha透明度
- 10. 透明UIImage
- 11. 如何在Android中爲佈局背景設置不透明度(Alpha)?
- 12. 如何在XAML中設置背景不透明度和邊框不透明度?
- 13. 重置繼承的不透明度/過濾器:alpha到完全透明
- 14. 設置的LayoutParams透明度
- 15. IOS:在UIImage中設置alpha
- 16. 如何設置Bing Map API層的不透明度,但保留PushPins對象的完全不透明度?
- 17. 如何獲得不透明度值作爲alpha濾鏡的int值?
- 18. 的JLabel不透明和Alpha
- 19. 更改UIView的alpha值會影響字體的不透明度
- 20. 設置可繪製的不透明度
- 21. 如何逐步透明UIImage?
- 22. 設置圖像透明度
- 23. 設置CSS中不透明度的div內元素的不透明度?
- 24. 透明的UIImage不是navrar中的透明
- 25. 如何設置HUD窗口的透明度
- 26. 將alpha設置爲零不會使我的標籤透明
- 27. 如何設置而QListView透明度,setWindowOpacity不到風度工作
- 28. 設置圖像不透明度問題
- 29. 將不透明度設置爲ImageButton?
- 30. 設置不透明度爲形狀
甚至不記得爲什麼我需要這個:) – Marty 2012-05-31 02:48:15
偉大的解決方案!謝謝尼克! – Christopher 2012-06-18 22:00:57
只需確保您在主線程上調用UIGraphicsBeginImageContextWithOptions,因爲背景渲染將是不可預知的。 – 2012-11-15 09:31:50