UIImage圖像操作 – iPhone手機開發技術文章 iPhone軟體開發教學課程

UIKit中有一些類可以用來操縱單個圖像,還有一個圖像類可以用來顯示圖像。Apple還提供瞭一種特殊的導航控制器,用於從圖像庫中選擇圖像。

UIImage類對圖像及其底層數據進行封裝。它可以直接繪制在一個視圖內,或者作為一個圖像容器在另一個更大的圖像視圖容器中使用。這個類類提供的方法可以用來從各種來源中載入圖像,在屏幕上設置圖片的方向,以及提供有關圖像的信息。對於簡單的圖形應用,可以將UIImage對象用在視圖類的drawRect方法中,用來繪制圖像和團模板。

你可以用文件來初始化,也可以用url、原始數據、或者一個Core Graphics圖像的內容。靜態方法(類方法)和實例方法都有;這些方法可以引用並緩存已有的圖像內容,也可以實例化新的圖像對象,如何使用完全取決於應用程序的需要。

使用一個圖像的最簡單方法就是通過靜態方法。靜態方法不會去管理圖像的實例,與之相反,他們提供瞭直接的接口,可以用來共享位於框架內部的記憶體緩存對象。這有助於保持應用程序的整潔,也會生去做清理工作的需要。靜態方法和實例方法都可以用來創建相同的對象。

一、使用文件創建(靜態方法)

源碼打印?
UIImage *myImage = [UIImage imageNamed:@"ppp"]; 
二、使用 URL 和原始數據(靜態方法)

源碼打印?
NSData *imageData = [ NSData initWithBytes:image:imagePtr length:imageSize ]; // 假設 imagePtr 是一個指向原始數據的指針 
UIImage* myImage = [ [ UIImage alloc ]initWithData:imageData ]; 
源碼打印?
UIImage *myImage2 =[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"/wp-content/images1/20181002/2012102309322760493.png"]]]; 
三、使用Core Graphics (靜態方法)

源碼打印?
UIImage* myImage3 = [UIImage imageWithCGImage:myCGImageRef]; 
四、使用文件(實例方法)

源碼打印?
UIImage* myImage4 = [[UIImage alloc]initWithContentsOfFile:[NSString stringWithFormat:@"%@/Documents/ppp.png",NSHomeDirectory()]]; 
五、使用 URL 和原始數據(實例方法)

如果圖像存儲在內存中,你可以創建一個NSData 對象作為initWithData 方法的原始輸入,來初始化一個UIImage對象。

如果圖像是一張網絡圖片,可以使用NSData來進行預載,然後用它來初始化UIImage對象:

源碼打印?
UIImage *myImage5 =[ [ UIImage alloc]initWithData: [NSData dataWithContentsOfURL:[NSURL URLWithString:@"/wp-content/images1/20181002/2012102309322760493.png"]] ]; 
六、使用Core Graphics (實例方法)

源碼打印?
UIImage* myImage6 = [[UIImage alloc]initWithCGImage:myCGImageRef]; 
七、顯示圖像

當視圖類的drawRect 方法被喚起時,它們會調用內部的回吐例程。與其他圖像類不同,UIImage對象不能被當成子 ,直接附著在其他視圖上,因為他不是一個視圖類。反過來,一個UIView類則可以在視圖的drawRect例程中,調用圖像的 drawRect 方法。這可以使得圖像顯在UIView類的顯示區域內部。

隻要一個視圖對象的窗口的某些部分需要繪制,就可以調用它的drawRect方法。要在窗口內 部顯示一個 UIImage 的內容,可以調用該對象的 drawRect 方法:

源碼打印?
– (void)drawRect:(CGRect)rect{ 
    CGRect myRect; 
     
    myRect.origin.x = 0.0 ; 
    myRect.origin.y = 0.0; 
    myRect.size = myImage.size; 
    [myImage drawInRect:myRect]; 

註意不要在drawRect方法內分配任何新對象,因為他在每次窗口重繪時都被調用。
隻有在視圖初次繪制時,才會調用drawRect方法。要強制更新,可以使用視圖類的 setNeedsDisplay 或者 setNeedsDisplayInRect  方法:

源碼打印?
[myView setNeedsDisplay]; 
    [myView setNeedsDisplayInRect:self.view]; 
八、繪制圖案

如果圖像是一個圖案模板,你可以用UIImage類提供的另外一個方法 drawAsPatternInrect,在整個視圖區域重復繪制該圖像:

源碼打印?
UIView* myView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 200, 200)]; 
    [myImage drawInRect:myView.frame]; 
    [self.view addSubview:myView];<span>    </span> 
九、方向

一個圖像的方向,決定瞭它在屏幕上如何被旋轉。因為iPhone 能被以6種不同的方式握持,所以在方向改變時,能夠將圖像做相應的旋轉就十分必要瞭。UIImage 有個隻讀屬性 imageOrientation 來標識它的方向。

源碼打印?
UIImageOrientation myOrientation =  myImage.imageOrientation ; 
可以設置以下方向:
源碼打印?
typedef enum { 
    UIImageOrientationUp,            // default orientation  默認方向 
    UIImageOrientationDown,          // 180 deg rotation    旋轉180度 
    UIImageOrientationLeft,          // 90 deg CCW         逆時針旋轉90度 
    UIImageOrientationRight,         // 90 deg CW          順時針旋轉90度 
    UIImageOrientationUpMirrored,    // as above but image mirrored along other axis. horizontal flip   向上水平翻轉 
    UIImageOrientationDownMirrored,  // horizontal flip    向下水平翻轉 
    UIImageOrientationLeftMirrored,  // vertical flip      逆時針旋轉90度,垂直翻轉 
    UIImageOrientationRightMirrored, // vertical flip      順時針旋轉90度,垂直翻轉 
} UIImageOrientation; 
十、圖像尺寸

你可以通過size屬性讀取一個圖像的尺寸,得到一個CGSize 結構,其中包含 wifth 和height 。

源碼打印?
CGSize myImageSize = myImage.size; 

發佈留言