Programim dhe zhvillim, javascript, python, php, html

Konvertoni një grup të dyfishtë në UIIimage me shpejtësi

A është e mundur të konvertohet një grup i dyfishtë në UIImage duke përdorur funksionin UIImage?

var ImageDouble = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]

Funksioni UIIimage kërkon String. Provova ta konvertoja grupin e elementit individual në vargje dhe të gjithën në varg, marr një rezultat zero. Mund të ndihmojë dikush?

[Redakto:]

Siç duket, nuk e kisha të qartë problemin tim. Për ta bërë më të qartë, unë po zhvilloj një softuer i cili pret numrat dhe operatorët nga një shprehje matematikore dhe më tregon të gjitha pjesët një nga një. Tani, si mund ta bëj këtë në Swift? :

Hapi-1: Kam dhënë një imazh në shkallë gri. E lexova duke përdorur funksionin UIImage. Unë e konvertoj atë në një funksion të personalizuar RGBA si më poshtë, në mënyrë që të mund të trajtoj një nivel pixel siç bëjmë në MATLAB ose Python ose C++. Funksioni është frymëzuar nga sugjerimet e shumë faqeve të internetit për ta përdorur atë.

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
}

}

Hapi-2: Tani marr një kanal të imazhit [E kuqe: nuk ka rëndësi se cilin e marr, pasi të gjitha kanalet kanë të njëjtin dalje] dhe aplikoj filtrin tim mesatar të personalizuar të madhësisë së kernelit 5x5.

Hapi 3: Më pas, bëj binarizimin e figurës duke përdorur përafrimin Nibblack, ku përdora filtrin mesatar dhe devijimin standard.

Hapi-4: Pas kësaj, përdora etiketimin e komponentëve të lidhur për të ndarë përbërës të ndryshëm të lidhur të imazhit.

Hapi-5: Më në fund, më duhet të pres imazhet e etiketuara dhe t'i ndryshoj përmasat e tyre. Për prerjen nga imazhi origjinal, unë e di vendndodhjen duke përdorur një algoritëm të zgjuar të vendndodhjes. Për ndryshimin e përmasave, unë dua të përdor filtrin Core Graphics Resizing. Megjithatë, për këtë më duhet të konvertoj daljen time aktuale [një grup dy-dimensional ose të rrafshuar] në UIImage ose CGImage.

Kjo është pyetja ime e vërtetë: Si të konvertoj në UIImage ose CGImage nga grupi dydimensional ose grupi i rrafshuar që janë të tipit Array<Double> ose Array<Int>?


  • pse përdorni dyfishin për imazh? 04.04.2016
  • Sepse nganjëherë, llogaritja që bëjmë në imazhe pas aplikimit të filtrit mesatar jep një rezultat në Double. Mund të merrem edhe me Int. Çështja është ta konvertoni atë në UIImage. 04.04.2016
  • A mund të na përshkruani se çfarë vërtet dëshironi të arrini? Këtu po ndjej një problem XY. 04.04.2016
  • Kjo mund të jetë një mundësi! Për këtë kërkoj falje! Megjithatë, gjëja që po përpiqem të arrij është: dua të jem në gjendje të konvertohem në një nga llojet ekzistuese të imazhit të Swift (UIImage ose CGImage) në mënyrë që të mund të përdor filtrat CG. Por unë kam një grup me tip të dhënash Double, ku grupi është padyshim i rrafshuar nga imazhi origjinal që është një grup 2D. 04.04.2016
  • A mund të postoni një shembull të vërtetë të grupit? Për sa grup të madh po flasim këtu? Ndoshta një kod se si e merrni grupin. 04.04.2016
  • Ok, tani shoh se çfarë po përpiqesh të bësh. Ju keni një grup vlerash nga të cilat dëshironi të ndërtoni një imazh. Sa është diapazoni i vlerave, 0...255? Është një kanal i vetëm apo i shumëfishtë? Nëse është e shumëfishtë, atëherë si vendosen ato në grup, të ndërthurura ose sekuenciale dhe a ka një kanal alfa? Cilat janë dimensionet përfundimtare të figurës? 05.04.2016
  • Gjëja tjetër është pse po punoni në katër kanale kur filloni me një imazh në shkallë gri? Duket sikur thjesht mund të punoni në një dhe të kurseni shumë burime. 05.04.2016
  • Imazhi im është një shkallë gri. Është një kanal. Tre kanale përdoren për të lexuar vlerat RGB nga imazhi me ngjyra dhe për shkallën gri, të gjitha vlerat R, G, B janë të njëjta, gjë që ju jep një imazh në shkallë gri. Po, ju keni të drejtë që merreni me një kanal dhe këtë bëj unë. Kanali alfa nuk është i rëndësishëm. Vlerat variojnë midis 0 dhe 255. Ato janë në grup të dyfishtë dhe mund të konvertohen në UInt8 duke transmetuar tipe. Dimensionet përfundimtare janë dinamike dhe ndryshojnë nga imazhi në imazh. Më e zakonshme është 120x90. Ato janë vargje të renditura të rreshtave kryesore dhe sekuenciale. 05.04.2016

Përgjigjet:


1

Provoni këtë:

var ImageDouble = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
let images = ImageDouble.map{ UIImage(named: "\($0)")}

funksioni i hartës do ta transformojë grupin tuaj në një grup tjetër.

04.04.2016
  • E provova këtë. Kam marrë një grup, i cili është i drejtë; por grupi është zero. 04.04.2016
  • A përmbajnë asetet tuaja të imazhit emrat e imazheve 1.0.png, 2.0.png...? 04.04.2016
  • Jo. ky është vetëm një grup i dyfishtë i krijuar siç do të bënim në matricën MATLAB ose grupin python. Unë dua ta konvertoj atë në UIImage ose CGImage (nëse është e mundur), në mënyrë që të mund ta shikoj ose të mund ta përdor në të ardhmen. 04.04.2016
  • Unë mendoj se do të krijonte një grup imazhi nëse keni disa imazhe në asetet tuaja të imazhit, nëse jo, grupi i imazheve do të ishte zero. 04.04.2016

  • 2

    Vetëm provoni këtë:

    var str:[String] = [];
    
    for (var i=0;i<ImageDouble.count;i++){
       str.append(String(ImageDouble[i]));
    }
    print(str)
    

    Por pse do t'ia kalonit një varg numrash një UIIimage? A janë emërtuar imazhet në aktivin tuaj si numra?

    04.04.2016

    3

    Duket sikur dëshironi të jepni 1, 2, etj në një bitmap.

    Së pari ju duhet një funksion për ta bërë këtë, dhe më pas përdorni flatMap në grupin e dyfisheve duke përdorur këtë. Kjo do të sigurojë që ju të merrni një sërë imazhesh UII në një mënyrë të sigurt duke filtruar nëse rezulton zero kur përpiqemi të krijojmë imazhe.

    func createNumberImage(number:Double) -> UIImage?{
    
        //Set a frame that you want.
        let frame = CGRect(x: 0, y: 0, width: 200, height: 200)
        let view = UIView(frame:frame )
        view.backgroundColor = UIColor.redColor()
    
        let label = UILabel(frame:frame)
        view.addSubview(label)
    
        label.font  = UIFont.systemFontOfSize(100);
        label.text = String(format: "%.1lf", arguments:[number])
        label.textAlignment = NSTextAlignment.Center
        view
    
        UIGraphicsBeginImageContext(view.bounds.size);
        view.layer.renderInContext(UIGraphicsGetCurrentContext()!)
        let screenShot = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    
        return screenShot
    }
    
    let doubles = [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]
    
    //Get the array of UIImage objects.  
    let images = doubles.flatMap { createNumberImage($0) }
    

    Ju mund të përdorni shesh lojërash për të verifikuar funksionimin. Gjithashtu mund të dëshironi të vendosni ngjyrat e duhura të sfondit dhe tekstit dhe madhësinë e shkronjave për t'iu përshtatur kërkesave tuaja.

    04.04.2016
  • Përshëndetje, unë dua të krijoj vetëm bitmap përveç vendosjes së një numri. Unë dua të vendos vlerat në grupin e dyfishtë për të krijuar një imazh. 04.04.2016
  • Kodi im gjeneron bitmaps ku secila prej tyre në fakt tërheq numrin. Nuk jam i sigurt nëse dëshironi një imazh të vetëm që shfaq të gjithë numrat në të, ose një imazh secili për secilin numër. Zgjidhja ime krijon më vonë. 04.04.2016
  • Nuk dua që numrat të shfaqen. Përkundrazi, unë dua të konvertoj një matricë 3x3 ose matricën e rrafshuar në një imazh. Vlerat për imazhin do të qëndrojnë midis 0-255. 04.04.2016
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..