en

hi, it seems you are using microsoft internet explorer. it doesn't match web standard and causes problems browsing this site. please please please use mozilla firefox or google chrome instead. thank you!

zh

哦哦!您正在使用Internet Explorer 瀏覽器,它與我們的網頁標準並不相容,可能會導致畫面顯示不正常。
請改用 Mozilla Firefox 或者 Google Chrome 才能正常瀏覽本網站,謝謝!

4.13.2011

CoreGraphics 的橡皮擦功能


在先前文章已經介紹過部份的 CoreGraphic 功能,像是改變色調、為 2D 影像添加材質與紋理遮色片的應用等,這裡將示範另一個很常用的橡皮擦功能,雖然說橡皮擦效果也可以使用遮色片等技巧來實現,但是在處理局部區域的影像時,會比遮色片來的方便許多,其程式碼如下。

UIImage *macImage = [UIImage imageNamed:@"mac.png"]; UIGraphicsBeginImageContext(macImage.size);

//設定參考範圍
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextScaleCTM(context, 1, -1);
CGRect region = CGRectMake(0, 0, macImage.size.width, macImage.size.height);
CGContextTranslateCTM(context, 0, -region.size.height);
CGContextDrawImage(context, region, macImage.CGImage);
CGRect eraserRect;

for (int y=5; y<=10; y++) {
    eraserRect = CGRectMake(0, y*15, macImage.size.width, 5);

    //實做像皮擦功能
    CGContextClearRect(context, eraserRect);
}

//將影像指定給imageView
imageView_1.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

上述程式碼擦除影像的位置是由 For 迴圈的迭代參數來決定,由於並未從新定義此影像 Context 的座標,因此擦除的方向是由下而上且由左至右來進行。






沒有留言:

張貼留言