vImageHistogramCalculation_ARGBFFFF(_:_:_:_:_:_:)
Calculates the histogram of a 32-bit-per-channel, 4-channel interleaved buffer.
Declaration
func vImageHistogramCalculation_ARGBFFFF(_ src: UnsafePointer<vImage_Buffer>, _ histogram: UnsafeMutablePointer<UnsafeMutablePointer<vImagePixelCount>?>, _ histogram_entries: UInt32, _ minVal: Pixel_F, _ maxVal: Pixel_F, _ flags: vImage_Flags) -> vImage_ErrorParameters
- src:
The source vImage buffer.
- histogram:
An array of four collections that contain
histogram_entrieselements that receive the histogram data. - histogram_entries:
The number of histogram entries.
- minVal:
The minimum pixel value. The operation assigns pixel values less than
minValto the first histogram entry. - maxVal:
The maximum pixel value. The operation assigns pixel values greater than
maxValto the last histogram entry. - flags:
The options to use when performing the operation. If your code implements its own tiling or its own multithreading, pass Kvimagedonottile; otherwise, pass Kvimagenoflags.
To specify that the function doesn’t calculate the alpha channel histogram, set the Kvimageleavealphaunchanged flag.
Return Value
kvImageNoError; otherwise, one of the error codes in Data Types and Constants.
Discussion
The following code populates the histogramAlpha , histogramRed, histogramGreen, and histogramBlue arrays with the histograms for each channel of the specified vImage_Buffer structure.
let entryCount = 64
var histogramAlpha = [vImagePixelCount](repeating: 0, count: entryCount)
var histogramRed = [vImagePixelCount](repeating: 0, count: entryCount)
var histogramGreen = [vImagePixelCount](repeating: 0, count: entryCount)
var histogramBlue = [vImagePixelCount](repeating: 0, count: entryCount)
histogramAlpha.withUnsafeMutableBufferPointer { zeroPtr in
histogramRed.withUnsafeMutableBufferPointer { onePtr in
histogramGreen.withUnsafeMutableBufferPointer { twoPtr in
histogramBlue.withUnsafeMutableBufferPointer { threePtr in
var histogramBins = [zeroPtr.baseAddress, onePtr.baseAddress,
twoPtr.baseAddress, threePtr.baseAddress]
histogramBins.withUnsafeMutableBufferPointer { histogramBinsPtr in
// `buffer` is a `vImage_Buffer` structure.
_ = vImageHistogramCalculation_ARGBFFFF(&buffer,
histogramBinsPtr.baseAddress!,
UInt32(entryCount),
0, 1,
vImage_Flags(kvImageNoFlags))
}
}
}
}
}