Я новичок в разработке IOS. Я уже пытался использовать следующий код для получения уникальных цветов от UIImage, но он не работает. И мой размер изображения 360x480
.Найдите уникальные цвета из UIImage в swift?
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++, и он работает нормально.
Заранее спасибо Sharief
Только FYI: в приложениях, связанных с iOS 10 или более поздней версией, цвет указан в расширенном цветовом пространстве, а входное значение никогда не зажимается, поэтому значение с плавающей запятой может идти ниже 0 или выше 1.0. Документы: https://developer.apple.com/reference/uikit/uicolor/1621925-init –
Да, но в этом случае, поскольку он идет от ARGB8 до UIColor, они всегда находятся в диапазоне 0.0 .. <1.0. –