1
私はIOS開発の初心者です。私はすでにUIImageからユニークな色を得るために次のコードを試しましたが、うまくいきません。私の画像サイズは360x480
です。私は任意の画像から2色を取得しています。このコードで UIImageからユニークな色をすばやく見つけられますか?
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))
}
、代わりにすべてのユニークな色の、とても親切にこの問題を解決する方法で私を助けて。
C++を使用して同じコードを試しましたが、うまくいきました。 Sharief
iOS 10以降にリンクされているアプリでは、色が拡張色空間で指定され、入力値は決して固定されないため、浮動小数点値は0以上1.0以下になる可能性があります。 Docs:https://developer.apple.com/reference/uikit/uicolor/1621925-init –
この場合、彼はARGB8からUIColorに行くので、常に0.0 .. <1.0の範囲にあります。 –