智汇工业-智慧工业、智能制造及工业智能、工业互联门户网站,专业的工业“互联网+”传媒

深入理解iPhone屏幕雙緩沖技術

來源:網絡

點擊:1146

A+ A-

所屬頻道:新聞中心

關鍵詞: iPhone,屏幕雙緩沖,技術,GUI

      筆者在最近項目的開發中需要使用到“屏幕雙緩沖”技術,“屏幕雙緩沖”是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,最后把這個“視圖快照”更新到屏幕上,從而實現屏幕雙緩沖的技術,效果如下:

      

    (審核編輯: 智匯小新)

    聲明:除特別說明之外,新聞內容及圖片均來自網絡及各大主流媒體。版權歸原作者所有。如認為內容侵權,請聯系我們刪除。

    主站蜘蛛池模板: 铸铁平台-焊接平台-划线平台-三维焊接平台厂家-泊头市溪海冶金机械设备有限公司 | 气体检测仪,多功能气体检测仪,四合一检测仪,氯气检测仪,有机挥发气体检测仪,气体报警器-南京诺邦电子科技有限公司 | 制冷加热循环机,密闭高低温一体机,优质密闭低温冷冻机-无锡冠亚恒温制冷技术有限公司 | 中标通国际认证(深圳)有限公司-知识产权管理体系认证-湖北知识产权贯标 | 久久91精品久久91综合_国产亚洲自拍一区_国产精品第1页_亚洲高清视频一区_91成人午夜在线精品_亚洲国产精品网站在线播放_亚洲国产成人久久综合区_国产精品亚洲专区在线观看_免费视频精品一区二区三区 | 誉瑞仪器是全球知名检测仪器厂商RAE在华东地区的专业级产品销售及授权维修服务商- | 上海网站建设-上海网站制作-网站设计-上海做网站公司-SEO优化推广-咏熠软件 | 宁波公司注册_宁波注册公司_宁波代理记账_宁波做内账|安隆会计专业服务机构 | 昆明纸箱厂-礼盒定制-包装盒定做-纸箱厂-云南包掌柜包装有限公司 | 河南新飞飞鸿实业有限公司 | 专注客流统计,客流分析,人流统计系统,客流计数器-广州市天威电子科技有限公司 | 全自动烫金机-全自动移印机-全自动丝印机-全自动平面机-东莞联昌实业供应各种丝印机和移印机 | 贴膜机厂家|高精度|手机贴膜机|全自动|半自动|无边覆膜机-深圳荷花自动化 | 上海鳞片胶泥-环氧胶泥价格-鳞片涂料批发-乙烯基树脂-环氧结构胶-上海富晨 | 射频微波_微波元器件_芯片_电源模块_Raychem_立维创展 | 江苏广分检测技术有限公司、电力安全工具检测、苏州绝缘工具检测、昆山电力安全工具检测-广分检测技术(苏州)有限公司 | 山东装卸登车桥_液压装卸升降平台_固定|移动登车桥_山东牛斗重工厂家 | 吉安天卓选矿药剂有限公司| 交通标志牌-交通标牌-铝圆牌-铝三角片-铝滑槽-公路警示指示牌-方牌-高速道路反光牌毛坯-交通设施安全警示标识牌-路名指示限速限高牌-厂家加工交通标牌铝板半成品毛坯-上海吕盟铝业有限公司 | 清关公司_进口报关公司【恒邦】进口报关流程及费用 | 西安西雷脉冲功率技术有限公司-高压调制器/加速器与脉冲功率系统的研发/生产/应用推广/高压脉冲电源的应用研究/设计/生产和销售/高功率脉冲器件/材料与仪器设备的研发/生产和销售/高电压/大电流/强磁场环境的模拟及测试服务/会议会展服务/货物及进出口的业务/脉冲功率技术领域类的技术转让 | 河南矿山重型起重机械有限公司| 江门高空车出租|高空作业设备出租|中特设备租赁有限公司 | 荧光显微镜,倒置显微镜,显微镜相机,荧光光源——广州市明美光电技术有限公司 | 石家庄启恒企业管理咨询有限公司 | 美林基业集团官网——美林基业,一生挚诚| 普利塞HS穿刺活检针-巴德穿刺活检针-美创爱琅Argon活检针同轴针-山东瑞玺源 | 潍坊亿宏重工机械有限公司,破碎机,高性能立磨机,颚式破碎机,锤式破碎机反击式破碎机,重锤式破碎机,高性能反击式破碎机,圆锥式破碎机,给料机系列,链板给料机系列,简易给料机系列,振动给料机 | 首页 - 北京明朝万达科技股份有限公司 | 机械配件加工_数控车床加工_零件加工_精密件加工_cnc加工定制—深圳精密机械加工 | 山东净化车间_净化工程_净化公司-山东海蓝净化装饰工程有限公司 山东金起起重机械有限公司[官网]-金桥银路悬臂吊,金起龙门吊,山东金起起重行吊,单梁起重机 | 饲料车_散装饲料车_畜禽运输车_散装饲料运输车_饲料车厂家_铝合金运猪车-程力专用汽车股份有限公司 | 西安测试仪-西安电压测试仪-西安电流测试仪-西安热油汽水测试仪-西安阻抗测试仪-西安时间速度测试仪-西安电力设备厂家-西安中洲电力设备有限公司 | 双单面研磨机_陶瓷平面研磨机_机械密封件研磨机-百诚研磨机械 | 交通标志牌-交通标牌-铝圆牌-铝三角片-铝滑槽-公路警示指示牌-方牌-高速道路反光牌毛坯-交通设施安全警示标识牌-路名指示限速限高牌-厂家加工交通标牌铝板半成品毛坯-上海吕盟铝业有限公司 | 以物联网技术为核心专注于智能安防领域物联网服务的高新技术企业-北京欣智恒科技股份有限公司(官网) | 宁波明驰同步带有限公司 | 配重铁砂|合金钢丸|山东铁砂|济南嘉日金属制品有限公司 | 智能化解决方案 智能家居 家庭影院 灯光音箱 会议室报告厅 剧场剧院 指挥中心 大数据中心_沈阳天哲科技有限公司 | 噪声治理_噪音治理公司「杭州创雅环境科技」 | 压力机-压装机-黄油机-黄油泵-[广东品嘉灵]专业定制各种精密压装设备 |