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 才能正常瀏覽本網站,謝謝!

5.24.2011

從 UIView 中取得 UIImage 的方法

 

通常來說 UIView 可以想成是一個容器,而 UIImage 則是這容器內的填充物,從字面上來看 UIImage 只是單純的影像,但是實際上它可能是由很多不同的物件所組成的影像,像是按鈕、圖片、文字或是動畫等等,下列程式碼將示範如何擷取 UIView 中的 UIImage 方法。

在開始前由於我們有使用到 QuartzCore 的類別,所以必須要先匯入其標頭檔與 Framework。

#import <QuartzCore/QuartzCore.h>


如果不知道如何新增 Framework 的讀者們,可以參考 Xcode 4 新增 Framework 的方法一文。

//自行定義的函式用來取得UIView中的UIImage
- (UIImage *)captureImageFromView:(UIView *)theView {

    //設定邊界大小和影像透明度與比例
    UIGraphicsBeginImageContextWithOptions(theView.bounds.size, theView.opaque, 0.0);
    [theView.layer renderInContext:UIGraphicsGetCurrentContext()];

    //取得影像
    UIImage *captureImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return captureImage;
}

透過上述函式我們已經可以成功取得 UIView 中的 UIImage ,此函式在擷取 UIImage 的同時,也可以設定其相關的參數,像是透明度或是比例等,在使用上也非常方便,只要在 setImage: 這導入此函式即可,本範例就是使用此方式將擷取出來的影像再貼回畫面上,一直反覆執行。

//此示範為擷取整個螢幕畫面
[imageView setImage:[self captureImageFromView:self.view]];

若是想要擷取動畫(CABasicAnimation 或是 CoreGraphicAnimation)中的影像時,必須將上述自訂函式程式碼的第 6 行更改成以下程式碼,這樣所擷取到的畫面才會是動畫執行中的畫面,而不是第一或是最後的影格,另一方面在函式的輸入參數也必須是 UIView(不能是 UIImageView),所以在實做時可以考慮多用一層 UIView 把原本 UIImageView 給包起來。

[[theView.layer presentationLayer] renderInContext:UIGraphicsGetCurrentContext()];





沒有留言:

張貼留言