다음과 같은 이미지의 모든 픽셀을 얻습니다.
let buffer = UnsafeMutableBufferPointer<UInt32>.allocate(capacity: size)
나중에 모든 픽셀을 반복하고 RGB 색상을 얻습니다.
for pixel in buffer {
var r : UInt32 = 0
var g : UInt32 = 0
var b : UInt32 = 0
if cgImage.byteOrderInfo == .orderDefault || cgImage.byteOrderInfo == .order32Big {
r = pixel & 255
g = (pixel >> 8) & 255
b = (pixel >> 16) & 255
} else if cgImage.byteOrderInfo == .order32Little {
r = (pixel >> 16) & 255
g = (pixel >> 8) & 255
b = pixel & 255
}
}
현재 색상을 얻을 수 있지만 추가로 해당 픽셀의 x 및 y 좌표를 얻고 싶습니다. 누구든지 이것을 구현할 방법이 있습니까?
내가 생각할 수있는 유일한 방법은 x와 y로 각 픽셀을 반복 한 다음 각 포인트의 바이트를 얻고 색상을 얻는 것입니다.하지만 UnsafeMutableBufferPointer가 더 빠르다고 생각했습니다.
이미지에 width
및 height
위치가 size = width * height
있습니다.
추가 .enumerated()
로 buffer
당신의 for
얻기 위해 루프 index
픽셀의를. 로 나누고 수정 하여 픽셀 width
의 (x, y)
좌표 를 찾습니다 .
for (index, pixel) in buffer.enumerated() {
let x = index % width
let y = index / width
var r : UInt32 = 0
var g : UInt32 = 0
var b : UInt32 = 0
if cgImage.byteOrderInfo == .orderDefault || cgImage.byteOrderInfo == .order32Big {
r = pixel & 255
g = (pixel >> 8) & 255
b = (pixel >> 16) & 255
} else if cgImage.byteOrderInfo == .order32Little {
r = (pixel >> 16) & 255
g = (pixel >> 8) & 255
b = pixel & 255
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다