Ich bin ein Neuling in der IOS-Entwicklung. Ich habe bereits versucht mit dem folgenden Code für einzigartige Farben von einem UIImage, aber es funktioniert nicht. Und meine Bildgröße ist 360x480
.Finden Sie die einzigartigen Farben von einem UIImage in 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))
}
mit diesem Code ich nur immer zwei Farben von jedem Bild, hilf mir, anstatt alle die einzigartigen Farben, so freundlich auf, wie dieses Problem zu lösen.
Ich habe den gleichen Code mit C++ versucht, und es funktioniert gut.
Vielen Dank im Voraus Sharief
Nur ein Hinweis: In Apps, die mit iOS 10 oder höher verknüpft sind, wird die Farbe in einem erweiterten Farbraum angegeben, und der Eingabewert wird niemals geklemmt, sodass der Fließkommawert unter 0 oder über 1,0 gehen kann. Docs: https://developer.apple.com/reference/uikit/uicolor/1621925-init –
Ja, aber in diesem Fall, da er von ARGB8 zu UIColor geht, sind sie immer im Bereich 0,0 .. <1,0. –