我正試圖在基本圖像上覆蓋自定義半透明圖像。覆蓋圖像是可拉伸的和這樣創建的:圖像上下文在合成UIImages時產生僞像
[[UIImage imageNamed:@"overlay.png"] stretchableImageWithLeftCapWidth:5.0 topCapHeight:5.0]
然後我傳遞關於覆蓋它到背景圖像的按鈕的方法:
- (void)overlayImage:(UIImage *)overlay forState:(UIControlState)state {
UIImage *baseImage = [self backgroundImageForState:state];
CGRect frame = CGRectZero;
frame.size = baseImage.size;
// create a new image context
UIGraphicsBeginImageContext(baseImage.size);
// get context
CGContextRef context = UIGraphicsGetCurrentContext();
// clear context
CGContextClearRect(context, frame);
// draw images
[baseImage drawInRect:frame];
[overlay drawInRect:frame];// blendMode:kCGBlendModeNormal alpha:1.0];
// get UIImage
UIImage *overlaidImage = UIGraphicsGetImageFromCurrentImageContext();
// clean up context
UIGraphicsEndImageContext();
[self setBackgroundImage:overlaidImage forState:state];
}
所得overlaidImage看起來大多正確,它是正確的大小,alpha是正確混合等,但它有垂直的人爲因素/噪音。
UIImage artifacts example http://acaciatreesoftware.com/img/UIImage-artifacts.png
(例如在http://acaciatreesoftware.com/img/UIImage-artifacts.png)
我試圖首先清除上下文,然後關閉PNG壓縮 - 這減少了僞像一些(完全在非拉伸的圖像我想)。
有沒有人知道一種方法繪製可伸縮的UIImages出這種artifacting發生?
'-stretchableImage ...'將整數作爲輸入。通過'5'而不是'5.0'(它不會解決問題)。 – kennytm 2010-02-20 08:39:22
謝謝。我有點驚訝gcc並沒有抱怨。我很習慣圖形尺寸浮動,我甚至沒有注意到它不是。 – 2010-02-20 08:50:01
C的自動類型降級使得5.0是一個合法且有效的int參數。因此,類型檢查不會導致警告。但我很驚訝地發現gcc似乎沒有提供降級警告。 – danielpunkass 2010-02-20 13:52:53