gpt4 book ai didi

ios - 快速从 UIImage 中找到独特的颜色?

转载 作者:行者123 更新时间:2023-11-28 08:32:16 25 4
gpt4 key购买 nike

我是IOS开发新手。我已经尝试使用以下代码从 UIImage 获取独特的颜色,但它不起作用。我的图片大小是 360x480

    let data = CGBitmapContextGetData(context)
var dataType = UnsafePointer<UInt8>(data)
var rgb: RGB = (red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)

var RedOffSet: UInt8 = 0xE0
var GreenOffSet: UInt8 = 0xF0
var BlueOffSet: UInt8 = 0xE0


var RGBHistogram = [Int](count: 1024, repeatedValue: 0)
var Top10Colors = [UInt](count: 10, repeatedValue: 0)
let size: Int = 4 * pixelsWide * pixelsHigh
var dtIndex = 0


while(true)
{
if(dtIndex < (size - 4)){

//let alpha = dataType[0]

let red = (dataType[dtIndex + 1]) & RedOffSet
let green = (dataType[dtIndex + 2]) & GreenOffSet
let blue = (dataType[dtIndex + 3]) & BlueOffSet

let index = red << 2 | green >> 1 | blue >> 5
let i: Int = Int(index)
RGBHistogram[i] += 1
//dataType += 4
dtIndex += 1
}
else {

print("Histogramm Created and Exited from Loop Here")
break;
}
}

//find the Top 10 Colors from Histogramm
var prevMax = 0
var max = 0
var maxJ = 0

for var indexI in 0 ..< 10 {
max = 0
for var indexJ in 0 ..< 1024 {

if indexI != 0 {

if (RGBHistogram[indexJ] > max) && (RGBHistogram[indexJ] < prevMax) {
max = RGBHistogram[indexJ]
maxJ = indexJ
}
}
else {

if RGBHistogram[indexJ] > max {
max = RGBHistogram[indexJ]
maxJ = indexJ
}
}
}
Top10Colors[indexI] = UInt(maxJ)
prevMax = RGBHistogram[maxJ]
}

//Change the Top 10 Cors to its RGB

for(var index = 0; index < 10; index += 1) {

let red = (Top10Colors[index] >> 2) & UInt(RedOffSet)
let green = (Top10Colors[index] << 1) & UInt(GreenOffSet)
let blue = (Top10Colors[index] << 5) & UInt(BlueOffSet)

rgb.red = CGFloat(red)
rgb.green = CGFloat(green)
rgb.blue = CGFloat(blue)

cpUniqueColorsList.append(UIColor(red: rgb.red, green: rgb.green, blue: rgb.blue, alpha: 1.0))
}

使用这段代码,我只能从任何图像中获得 2 种颜色,而不是所有独特的颜色,所以请帮助我解决这个问题。

我已经尝试使用 C++ 编写相同的代码,并且运行良好。

提前致谢分享

最佳答案

UIColor 基于 0..<1.0 的组件值,而不是 0..<256。将每个组件除以 255.0,您应该会得到更好的结果。另请注意,您的哈希算法完全消除了红色 (0xff & 0xe0 << 2) = 0因为该数学将作为 UInt8 完成。

关于ios - 快速从 UIImage 中找到独特的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38641247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com