posted on
july 12, 2012
by luckyhu
一直沒在sdk的api中發現有比較簡便直觀的取得cgimage位元組資料的方法,自己曾經在這上面來來去去花了不少時間,有時實現了,但沒有做相關總結,下次使用時又忘記,又重新搗鼓一遍,浪費經歷和時間。
通過我在網上搜尋和總結,目前看來,我發現兩種比較方便的方式。
1. cgimage -> cgdataprovider -> cfdata -> xx *
這樣得到的就是void*型別的資料.cgdataproviderref
provider
=cgimagegetdataprovider
(cgimage
);void
*data
=(void
*)cfdatagetbyteptr
(cgdataprovidercopydata
(provider
));
2. cgimage -> cgcontext -> void *
另外我在stackoverflow上看到大家的討論中,對取得的位元組資料每四位做了乙個求餘運算並都轉換成了uicolor,暫時不是很清楚為什麼要這樣做。intswidth
=cgimagegetwidth
(cgimage
);int
sheight
=cgimagegetheight
(cgimage
);cgimageref
mcontent
=cgimage
;cgcontextref
context
=cgbitmapcontextcreate
(null
,cgimagegetwidth
(mcontent
),cgimagegetheight
(mcontent
),cgimagegetbitspercomponent
(mcontent
),cgimagegetbytesperrow
(mcontent
),cgimagegetcolorspace
(mcontent
),cgimagegetbitmapinfo
(mcontent
));cgcontextdrawimage
(context
,cgrectmake(0
,0,swidth
,sheight
),mcontent
);void
*data
=cgbitmapcontextgetdata
(context
);
當得到cgimage的位元組資料,有時又需要把它轉化成uiimage.
我目前的做法是:
我測試過以上一套方法,能正常顯示影象,只是在alpha的值上和原圖有些不一樣轉成位元組資料再轉換成uiimage以後,原本是透明的部分變成了黑色,目前我還沒有深入去找出原因,但大概的問題可能猜得到.void
*data
;cgdataproviderrefpv=
cgdataprovidercreatewithdata
(data
,data
,swidth
*sheight*4
,contentreleasecallback
);cgimageref
content
=cgimagecreate
(swidth
,sheight,8
,32,4
*swidth
,cgcolorspacecreatedevicergb
(),kcgbitmapbyteorder32big
|kcgimagealphanoneskiplast,pv
,null
,true
,kcgrenderingintentdefault
);uiimage
*ci =[
uiimage
imagewithcgimage
:content
];
我也嘗試過用
uiimage來轉化位元組資料到uiimage,但這個方法一直沒有成功,原因還沒搞懂。*ci =[
uiimage
imagewithdata
:[nsdata
datawithbytes
:data length
:swidth
*sheight*4
]];
iOS 取得CGimage位元組資料的方法
通過我在網上搜尋和總結,目前看來,我發現兩種比較方便的方式。1.cgimage cgdataprovider cfdata xx cgdataproviderref provider cgimagegetdataprovider cgimage void data void cfdatagetbyt...
iOS 取得CGimage位元組資料的方法
通過我在網上搜尋和總結,目前看來,我發現兩種比較方便的方式。1.cgimage cgdataprovider cfdata xx cgdataproviderref provider cgimagegetdataprovider cgimage void data void cfdatagetbyt...
各變數位元組數
win64,也就是x64編譯配置下 char 1位元組 short 2位元組 int 4位元組 long 4位元組 long long 8位元組 float 4位元組 double 8位元組 long double 8位元組 wchar t 2位元組 bool 1位元組 指標都是8位元組 char ...