《電子技術應用》
您所在的位置:首頁 > 顯示光電 > 設計應用 > 深入理解iPhone屏幕雙緩沖技術
深入理解iPhone屏幕雙緩沖技術
摘要: 筆者在最近項目的開發中需要使用到“屏幕雙緩沖”技術,“屏幕雙緩沖”是GUI客戶端中最經常使用的一種技術,但是這種技術在iPhone平臺似乎很少被人使用到,網上的資料基本很難找到,這點讓筆者很是不解.
Abstract:
Key words :

  筆者在最近項目的開發中需要使用到“屏幕雙緩沖技術,“屏幕雙緩沖”是GUI客戶端中最經常使用的一種技術,但是這種技術在iPhone平臺似乎很少被人使用到,網上的資料基本很難找到,這點讓筆者很是不解。

  相信大多數人都知道,所謂“屏幕雙緩沖”是指在內存中建立一個“圖形設備上下文的緩存”,所有的繪圖操作都在這個“圖形上下文緩存”上進行,在需要顯示這個“圖形上下文”的時候,再次把它更新到屏幕設備上。

  iPhone平臺提供了這樣一個API:

  CGContextRef CGBitmapContextCreate (

  void *data,

  size_t width,

  size_t height,

  size_t bitsPerComponent,

  size_t bytesPerRow,

  CGColorSpaceRef colorspace,

  CGBitmapInfo bitmapInfo

  );

  這個API各個參數的意義如下:

  Ø 參數data指向繪圖操作被渲染的內存區域,這個內存區域大小應該為(bytesPerRow*height)個字節。如果對繪制操作被渲染的內存區域并無特別的要求,那么可以傳遞NULL給參數date。

  Ø 參數width代表被渲染內存區域的寬度。

  Ø 參數height代表被渲染內存區域的高度。

  Ø 參數bitsPerComponent被渲染內存區域中組件在屏幕每個像素點上需要使用的bits位,舉例來說,如果使用32-bit像素和RGB顏色格式,那么RGBA顏色格式中每個組件在屏幕每個像素點上需要使用的bits位就為32/4=8。

  Ø 參數bytesPerRow代表被渲染內存區域中每行所使用的bytes位數。

  Ø 參數colorspace用于被渲染內存區域的“位圖上下文”。

  Ø 參數bitmapInfo指定被渲染內存區域的“視圖”是否包含一個alpha(透視)通道以及每個像素相應的位置,除此之外還可以指定組件式是浮點值還是整數值。

  從接口定義中可以看出,當調用這個函數時,系統會創建一個“視圖繪制環境”,這個“視圖繪制環境”就是讀者定義的一個“視圖上下文”。當讀者在這個“視圖上下文”進行繪制操作時,系統會在定義的渲染內存區域中把繪制操作渲染成位圖數據。“視圖上下文”的像素格式由三個參數來定義,也就是每個組件占用的bits位數、colorspace以及alpha(透視),而alpha值指定了每個像素的不透明度。

  根據上面講述的知識點,筆者定義了被渲染內存區域如下:

  imageData = malloc((iFrame.size.width)*(iFrame.size.height)*32);

  筆者這里在屏幕每個像素上使用了32-bits來表示RGBA顏色格式,那么參數bitsPerComponent就為32/4=8,各個參數的定義如下:

  iDevice = CGBitmapContextCreate(imageData,iFrame.size.width,iFrame.size.height,8,32*(iFrame.size.width),iColorSpace,kCGImageAlphaPremultipliedLast);

  這里筆者獲取iColorSpace的方法如下:

  iColorSpace = CGColorSpaceCreateDeviceRGB();

  CGColorSpaceCreateDeviceRGB()方法可以獲取設備無關的RGB顏色空間,這個顏色空間需要調用CGColorSpaceRelease()進行釋放。

  在創建成功被渲染的內存區域的“視圖上下文”iDevice后,那么讀者就可以在這個被渲染的內存區域的“位圖上下文”上進行繪制操作了,正如上面所講的,所有的繪制操作將在被渲染的內存區域中被渲染成位圖數據,繪制操作如下:

  // 繪制圖片

  CGContextDrawImage(iDevice, CGRectMake(0, 0, iFrame.size.width, iFrame.size.height), aImage);

  // 繪制半透明矩形

  CGRect rt;

  rt.origin.x = 100;

  rt.origin.y = 20;

  rt.size.width = 200;

  rt.size.height = 200;

  CGContextSaveGState(iDevice);

  CGContextSetRGBFillColor(iDevice, 1.0, 1.0, 1.0, 0.5);

  CGContextFillRect(iDevice, rt);

  CGContextRestoreGState(iDevice);

  CGContextStrokePath(iDevice);

  // 繪制直線

  CGContextSetRGBStrokeColor(iDevice, 1.0, 0.0, 0.0, 1.0);

  CGPoint pt0, pt1;

  CGPoint points[2];

  pt0.x = 10;

  pt0.y = 250;

  pt1.x = 310;

  pt1.y = 250;

  points[0] = pt0;

  points[1] = pt1;

  CGContextAddLines(iDevice, points, 2);

  CGContextStrokePath(iDevice);

  可見,在被渲染的內存區域的“位圖上下文”中可以進行圖片、矩形、直線等各種繪制操作,這些操作被渲染成位圖數據,讀者可以通過如下方法獲取到這個被渲染的“位圖”:

  -(void)drawRect:(CGRect)rect {

  // Drawing code

  UIGraphicsGetCurrentContext();

  UIImage* iImage = [UIImage imageNamed:@“merry.png”];

  [iOffScreenBitmap DrawImage:iImage.CGImage];

  UIImage* iImage_1 = [UIImage imageWithCGImage:[iOffScreenBitmap Gc]];

  [iImage_1 drawInRect:CGRectMake(0, 0, 120, 160)];

  }

  上面的代碼中,通過iOffScreenBitmap的DrawImage:CGImageRef方法把圖片merry.png繪制到屏幕雙緩沖中,并接著進行了矩形、直線繪制,然后通過CGBitmapContextCreateImage:CGConotextRef方法獲取“視圖上下文”的“視圖快照(snapshot)”image_1,最后把這個“視圖快照”更新到屏幕上,從而實現屏幕雙緩沖的技術,效果如下:

  

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
小辣椒精品导航| 久久成人精品视频| 国产在线精品自拍| 国产精品视频自拍| 欧美视频一区二区在线观看| 欧美极品色图| 欧美精品手机在线| 欧美福利在线观看| 免费观看在线综合| 免费黄网站欧美| 美女视频黄免费的久久| 久久免费视频观看| 久热精品在线| 欧美高清免费| 欧美精品一区二区在线播放| 欧美va亚洲va日韩∨a综合色| 久久一区二区三区国产精品 | 亚洲综合欧美| 亚洲专区国产精品| 亚洲欧美自拍偷拍| 欧美在线看片a免费观看| 欧美在线不卡| 久久综合九色综合欧美狠狠| 欧美jizz19性欧美| 欧美日韩国产成人在线观看| 欧美三区视频| 国产精品综合不卡av| 国产一级精品aaaaa看| 韩国精品在线观看| 亚洲国产aⅴ天堂久久| 亚洲日韩视频| 亚洲视频 欧洲视频| 亚洲综合视频一区| 亚洲大胆美女视频| 亚洲精品无人区| 亚洲一区二区三区四区中文 | 欧美日韩高清在线| 国产精品美女在线| 国产在线观看精品一区二区三区| 在线观看成人网| 亚洲精品国产日韩| 中文日韩在线| 久久精品亚洲国产奇米99| 亚洲伦理在线免费看| 亚洲图片欧美午夜| 久久精彩视频| 欧美成人午夜激情| 欧美视频导航| 国产综合18久久久久久| 91久久久在线| 亚洲欧美成人| 亚洲精品麻豆| 午夜精彩视频在线观看不卡 | 91久久综合| 亚洲一区二区三区免费观看| 久久九九免费| 欧美乱人伦中文字幕在线| 国产精品视频久久久| 影音先锋成人资源站| 在线亚洲自拍| 久久精品视频在线看| 亚洲一区观看| 久久亚洲图片| 国产精品久久久久77777| 在线播放一区| 亚洲午夜在线视频| 最新国产成人在线观看| 亚洲欧美日韩在线播放| 免费成人激情视频| 国产精品一二一区| 亚洲经典一区| 欧美一区二区日韩| 中文国产亚洲喷潮| 久久午夜精品| 国产精品成人免费| 亚洲第一福利在线观看| 亚洲在线第一页| 日韩视频在线免费观看| 久久久精品网| 国产精品高潮呻吟久久| 亚洲黄色精品| 欧美一区二区视频免费观看| 一区二区三区四区五区精品视频| 久久男女视频| 国产噜噜噜噜噜久久久久久久久| 最新成人av网站| 久久gogo国模裸体人体| 亚洲综合色婷婷| 欧美女主播在线| 在线成人激情视频| 午夜精品婷婷| 亚洲欧美综合| 欧美色另类天堂2015| 亚洲国产精品嫩草影院| 久久成人精品电影| 午夜在线一区| 国产精品对白刺激久久久| 最近中文字幕日韩精品 | 亚洲视频在线观看视频| 欧美gay视频| 激情欧美一区二区| 亚洲欧美一区二区三区在线| 亚洲桃色在线一区| 欧美国产在线观看| 136国产福利精品导航网址应用| 亚洲欧美卡通另类91av| 亚洲一区在线免费观看| 欧美日韩一区二区三区在线观看免 | 一区二区三区欧美激情| 欧美国产日本| 亚洲国产合集| 亚洲娇小video精品| 老司机久久99久久精品播放免费| 国产亚洲欧美激情| 欧美淫片网站| 久久精彩视频| 国内伊人久久久久久网站视频 | 国产精品久久久久久五月尺 | 亚洲欧美日韩精品久久| 亚洲免费在线观看视频| 欧美午夜在线| 亚洲一区二区三区四区中文| 亚洲一区二区三区精品在线 | 91久久精品日日躁夜夜躁国产| 亚洲高清免费视频| 毛片一区二区| 亚洲国产欧美一区| 亚洲免费播放| 欧美日韩精品免费观看| 99视频精品在线| 亚洲欧美日韩天堂| 国产日韩亚洲| 亚洲电影免费观看高清完整版在线| 久久夜色精品| 亚洲高清免费| av成人毛片| 欧美三级韩国三级日本三斤| 一区二区三区www| 欧美一二三区在线观看| 国产亚洲精品bt天堂精选| 久久精品电影| 欧美国产亚洲另类动漫| 夜夜爽av福利精品导航| 亚洲欧美日韩一区二区三区在线| 国产欧美精品日韩区二区麻豆天美| 午夜精品久久久久影视 | 91久久午夜| 欧美日韩午夜剧场| 亚洲一区在线观看视频| 久久久国产精彩视频美女艺术照福利| 韩国女主播一区| 日韩视频精品| 国产精品欧美日韩久久| 欧美在线一区二区| 欧美激情中文不卡| 亚洲一二三区在线| 久久免费偷拍视频| 99精品福利视频| 久久精品国产免费观看| 亚洲国产精品国自产拍av秋霞| 一区二区三区精品国产| 国产精品一区一区三区| 亚洲国产三级网| 国产精品v日韩精品| 欧美在线视频观看| 可以免费看不卡的av网站| 一本大道久久a久久精二百| 欧美在线亚洲一区| 亚洲国产另类久久精品| 亚洲欧美综合网| 亚洲国内自拍| 欧美在线视频a| 亚洲国产天堂久久综合| 亚洲永久免费av| 午夜视频一区| 欧美国产视频日韩| 亚洲综合第一页| 你懂的视频一区二区| 一区二区三区日韩欧美| 久久婷婷丁香| 一区二区三区免费在线观看| 久久久福利视频| 中文日韩在线视频| 欧美3dxxxxhd| 午夜精品国产精品大乳美女| 欧美精品www| 久久国产欧美日韩精品| 国产精品激情电影| 亚洲精品少妇| 国产一区二区三区丝袜| 亚洲自拍另类| 最新中文字幕一区二区三区| 久久精品日产第一区二区三区| 亚洲精品欧美日韩| 久久久久久欧美| 亚洲欧美乱综合| 欧美视频一区二区三区在线观看| 亚洲国产视频一区| 国产伦精品一区二区三区高清版| 妖精成人www高清在线观看|