UIImage işlevini kullanarak bir çift diziyi UIImage öğesine dönüştürmek mümkün müdür?Çift Düzeni UIImage ürününe dönüştürebilir
var ImageDouble = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
UIImage işlevi String için sorar. Diziyi münferit eleman üzerine dizgiye dönüştürmeyi denedim ve her şeyi dize getirdim, sonuçta bir sonuç aldım. Birisi yardım edebilir mi?
[Düzenleme:]
o benim problem üzerinde gerçekten net değilmiş gibi. Daha açık yapmak gerekirse, matematiksel bir ifadeden & operatörünü numaralandıran ve tüm parçaları tek tek gösteren bir yazılım geliştiriyorum. Şimdi, Swift'e nasıl gideceğim? :
Adım-1: Sağlanmış gri tonlamalı bir resim var. UIImage işlevini kullanarak okudum. MATLAB ya da Python ya da C++ 'da yaptığımız gibi bir piksel düzeyini ele alabilmem için onu özel bir RGBA işlevine dönüştürüyorum. İşlev, birçok web sitesinin kullanımından ilham alır.
struct Pixel {
var value: UInt32
var red: UInt8 {
get { return UInt8(value & 0xFF) }
set { value = UInt32(newValue) | (value & 0xFFFFFF00) }
}
var green: UInt8 {
get { return UInt8((value >> 8) & 0xFF) }
set { value = (UInt32(newValue) << 8) | (value & 0xFFFF00FF) }
}
var blue: UInt8 {
get { return UInt8((value >> 16) & 0xFF) }
set { value = (UInt32(newValue) << 16) | (value & 0xFF00FFFF) }
}
var alpha: UInt8 {
get { return UInt8((value >> 24) & 0xFF) }
set { value = (UInt32(newValue) << 24) | (value & 0x00FFFFFF) }
}
}
struct RGBA {
var pixels: UnsafeMutableBufferPointer<Pixel>
var width: Int
var height: Int
init?(image: UIImage) {
guard let cgImage = image.CGImage else { return nil }
width = Int(image.size.width)
height = Int(image.size.height)
let bitsPerComponent = 8
let bytesPerPixel = 4
let bytesPerRow = width * bytesPerPixel
let imageData = UnsafeMutablePointer<Pixel>.alloc(width * height)
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapInfo: UInt32 = CGBitmapInfo.ByteOrder32Big.rawValue
bitmapInfo |= CGImageAlphaInfo.PremultipliedLast.rawValue & CGBitmapInfo.AlphaInfoMask.rawValue
guard let imageContext = CGBitmapContextCreate(imageData, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo) else { return nil }
CGContextDrawImage(imageContext, CGRect(origin: CGPointZero, size: image.size), cgImage)
pixels = UnsafeMutableBufferPointer<Pixel>(start: imageData, count: width * height)
}
func toUIImage() -> UIImage? {
let bitsPerComponent = 8
let bytesPerPixel = 4
let bytesPerRow = width * bytesPerPixel
let colorSpace = CGColorSpaceCreateDeviceRGB()
var bitmapInfo: UInt32 = CGBitmapInfo.ByteOrder32Big.rawValue
bitmapInfo |= CGImageAlphaInfo.PremultipliedLast.rawValue & CGBitmapInfo.AlphaInfoMask.rawValue
let imageContext = CGBitmapContextCreateWithData(pixels.baseAddress, width, height, bitsPerComponent, bytesPerRow, colorSpace, bitmapInfo, nil, nil)
guard let cgImage = CGBitmapContextCreateImage(imageContext) else {return nil}
let image = UIImage(CGImage: cgImage)
return image
}
}
Adım 2: Şimdi resmin [Kırmızı bir kanal alabilir: tüm kanallar aynı olması beri, aldığı bir önemi yoktur çıktı] ve çekirdek boyut 5x5 özel medyan filtresini uygulayın.
Adım-3: Ardından, ortalama filtre ve standart sapma kullandığım Nibblack yaklaşımını kullanarak görüntünün binarizasyonunu yapıyorum.
Adım-4: Bundan sonra, görüntünün farklı bağlı bileşenlerini ayırmak için bağlı bileşen etiketlemeyi kullandım.
Adım-5: Son olarak, etiketli görüntüleri kesmem ve yeniden boyutlandırmam gerekiyor. Orijinal görüntüden kırpmak için akıllı bir konum algoritması kullanarak yeri biliyorum. Yeniden boyutlandırmak için Çekirdek Grafik Boyutlandırma filtresini kullanmak istiyorum. Bununla birlikte, şu anki çıktımı [iki boyutlu bir dizi veya düzleştirilmiş] UIImage veya CGImage'a dönüştürmem gerekiyor. Ben tip Array<Double>
veya Array<Int>
ait olan iki boyutlu bir dizi veya düzleşmiş diziden UIImage veya CGImage dönüştürmek nasıl: benim gerçek soru
?
neden çift görüntü için kullanıyorsunuz? – Lee
Zaman zaman, ortalama filtre uyguladıktan sonra görüntülerde yaptığımız hesaplama, Double (Çift) sonucunu verir. Int ile de başa çıkabilirim. Önemli olan UIImage'a dönüştürmektir. – Nasiba
Gerçekten neyi başarmak istediğinizi bize anlatabilir misiniz? Burada bir [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) sorununu kokluyorum. – ozgur