我試圖通過基於當前電池電量在普通電池圖像上繪製另一個裁剪圖像來實現電池級別效果。裁剪和放置圖像以實現電池電量效果
目前我能夠改變空電池圖像的顏色,但我不知道如何裁剪,新的,並將其放在原來的頂部。
我發現了一些關於如何裁剪的有用鏈接,但是,它們中的每一個都是從圖像的左上角裁剪。我想以左下角爲起點,根據當前的水平設置高度。
此外,可以將裁剪後的圖像合併或放置在原始圖像的頂部?
這是我的原始圖像。
...和我所試圖實現
此刻我想這個代碼,
int width = emptyBm.size.width;
int height = fullBm.size.height * level/100;
UIImage *image = [UIImage imageNamed:@"battery_icon"];
UIImage *image2 = [UIImage imageNamed:@"battery_icon_full"];
CGRect rect = CGRectMake(0, image.size.height-height, width, height);
CGImageRef imageRef = CGImageCreateWithImageInRect([image2 CGImage], rect);
CGImageRef actualMask = CGImageMaskCreate(CGImageGetWidth([image CGImage]),
CGImageGetHeight([image CGImage]),
CGImageGetBitsPerComponent([image CGImage]),
CGImageGetBitsPerPixel([image CGImage]),
CGImageGetBytesPerRow([image CGImage]),
CGImageGetDataProvider([image CGImage]), NULL, false);
CGImageRef masked = CGImageCreateWithMask(imageRef, actualMask);
batteryBackground.image = [UIImage imageWithCGImage:masked];
但是,因爲我使用CGImageCreateWithImageInRect
剪裁的部分是拉伸
從左下角好開始是指從圖像高度值減去開始「高度「。這只是簡單的數學定義你的CGRect。 – shadowhorst
好吧,我實際上意識到shadowhorst在發佈我的示例代碼後所說的話。如果您的綠色電池圖像已經具有形狀和透明度,那麼通過減去使用的部分就足以重新計算CGRect。只是不要忘記將它的contentMode設置爲非伸展的內容模式。我描述的例子也應該是可用的,但不是最優的,除非你想用一個純綠色的矩形作爲填充指示器。 – basar