動手教你擼乙個iOS顏色拾取器

2021-09-12 17:45:58 字數 2267 閱讀 5850

結束使用cgcontext進行顏色的拾取能夠節省記憶體的使用(cgcontext對管理的具體使用後期來專講一下)

獲取uiimageview中的uiimage

拾取座標的轉換

利用bitmapinfo來獲取uiimage的rgb分布

利用cgcontext獲取目標畫素的分布值

輸出對應位置的顏色值

func getcolor(inimageview imageview: uiimageview, selectedpoint: cgpoint) -> uicolor?

// 用來存放目標畫素值

var pixel = [uint8](repeatelement(0, count: 4))

// 顏色空間為 rgb,這決定了輸出顏色的編碼是 rgb 還是其他(比如 yuv)

let colorspace = cgcolorspacecreatedevicergb()

// 設定位圖顏色分布為 rgba

let bitmapinfo = cgimagealphainfo.premultipliedlast.rawvalue

guard let context = cgcontext(data: &pixel, width: 1, height: 1, bitspercomponent: 8, bytesperrow: 4, space: colorspace, bitmapinfo: bitmapinfo) else

// 設定 context 原點偏移為目標位置所有座標

context.translateby(x: -newselectedpoint.x, y: -newselectedpoint.y)

// 將影象渲染到 context 中

imageview.layer.render(in: context)

return uicolor(red: cgfloat(pixel[0]) / 255.0,

green: cgfloat(pixel[1]) / 255.0,

blue: cgfloat(pixel[2]) / 255.0,

alpha: cgfloat(pixel[3]) / 255.0)

}

view中包含uiimageview顯示需要採集顏色的

包含uibutton作為採集位置的指示器

利用uipangesturerecognizer實現拖動uibutton選擇採集位置

import uikit

typealias colorchange = (uicolor?)->void //選擇顏色的閉包

@ibdesignable //視覺化的關鍵字

class colorselectedview: uiview

required init?(coder adecoder: nscoder)

//mark:載入xib檔案的view檢視

func loadviewfromnib() -> uiview

//拖動選擇需要採集顏色的位置

在xib檔案中或者在storyboard視覺化介面中直接使用

在**中直接使用

@iboutlet weak var colorselectedview: colorselectedview!

...colorselectedview.colorchange =

}

哈哈,可以自己拖動button進行位置選擇,當拖動時會實時輸出選中位置的顏色。好了,就是這麼簡單!你也來試試吧!

用VC 開發乙個螢幕顏色拾取器

一 用到的關鍵api及說明 1 函式功能 該函式檢索指定座標點的畫素的rgb顏色值。函式原型 colorref getpixel hdc hdc,int nxpos,int nypos 2 函式功能 捕捉滑鼠訊息 函式原型 hwnd setcapture hwnd hwnd hwnd 當前執行緒裡要...

自己動手擼乙個靜態部落格生成器

國慶期間試著擼了個靜態部落格工具 歡迎一起交流 github.com laoqiren yo npm npm npm 乙個靜態部落格生成器,採用node.js開發。yohe 喲呵,乙個會讓你發出 喲呵,不錯哦 感嘆的靜態部落格生成器。線上demo luoxia.me yohe site englis...

手摸手教你擼乙個可拖拽元件(附原始碼)

業務需求 1 實現乙個可以全頁面可以拖拽的元件 2 順帶介紹一下vue draggable外掛程式,可以實現多個元件之間的拖動 展示一下效果圖 這個元件我是借用的vue的directive自定義指令的方式實現的,如果對vue的自定義指令還是不很熟悉的話可以先去官網了解一波,當然熟悉的童鞋也可以不用v...