Voglio manipolare un'immagine a livello di pixel in Swift. Questa domanda ha avuto risposta per l'obiettivo c: How do I access and manipulate JPEG image pixels?, ma mi piacerebbe vedere la fonte equivalente per Swift.Come caricare e modificare un file bitmap a livello di pixel in Swift per iOS?
10
A
risposta
13
Ecco come ottenere un colore da un'immagine in una posizione tattile.
ho tradotto questa risposta: https://stackoverflow.com/a/12579413/359578
(Questo campione non fa controllo degli errori per nil)
func createARGBBitmapContext(inImage: CGImage) -> CGContext {
var bitmapByteCount = 0
var bitmapBytesPerRow = 0
//Get image width, height
let pixelsWide = CGImageGetWidth(inImage)
let pixelsHigh = CGImageGetHeight(inImage)
// Declare the number of bytes per row. Each pixel in the bitmap in this
// example is represented by 4 bytes; 8 bits each of red, green, blue, and
// alpha.
bitmapBytesPerRow = Int(pixelsWide) * 4
bitmapByteCount = bitmapBytesPerRow * Int(pixelsHigh)
// Use the generic RGB color space.
let colorSpace = CGColorSpaceCreateDeviceRGB()
// Allocate memory for image data. This is the destination in memory
// where any drawing to the bitmap context will be rendered.
let bitmapData = malloc(bitmapByteCount)
// Create the bitmap context. We want pre-multiplied ARGB, 8-bits
// per component. Regardless of what the source image format is
// (CMYK, Grayscale, and so on) it will be converted over to the format
// specified here by CGBitmapContextCreate.
let context = CGBitmapContextCreate(bitmapData, pixelsWide, pixelsHigh, 8, bitmapBytesPerRow, colorSpace, CGImageAlphaInfo.PremultipliedFirst.rawValue)
// Make sure and release colorspace before returning
return context!
}
func getPixelColorAtLocation(point:CGPoint, inImage:CGImageRef) -> NSColor {
// Create off screen bitmap context to draw the image into. Format ARGB is 4 bytes for each pixel: Alpa, Red, Green, Blue
let context = self.createARGBBitmapContext(inImage)
let pixelsWide = CGImageGetWidth(inImage)
let pixelsHigh = CGImageGetHeight(inImage)
let rect = CGRect(x:0, y:0, width:Int(pixelsWide), height:Int(pixelsHigh))
//Clear the context
CGContextClearRect(context, rect)
// Draw the image to the bitmap context. Once we draw, the memory
// allocated for the context for rendering will then contain the
// raw image data in the specified color space.
CGContextDrawImage(context, rect, inImage)
// Now we can get a pointer to the image data associated with the bitmap
// context.
let data = CGBitmapContextGetData(context)
let dataType = UnsafePointer<UInt8>(data)
let offset = 4*((Int(pixelsWide) * Int(point.y)) + Int(point.x))
let alpha = dataType[offset]
let red = dataType[offset+1]
let green = dataType[offset+2]
let blue = dataType[offset+3]
let color = NSColor(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: CGFloat(alpha)/255.0)
// Free image data memory for the context
free(data)
return color;
}
Problemi correlati
- 1. Come posso caricare un'immagine bitmap e manipolare i singoli pixel?
- 2. Come modificare a livello di codice il contrasto di una bitmap in Android?
- 3. get pixel da bitmap
- 4. Caricare correttamente i dati bitmap a 24 bit in un oggetto bitmap a 32 bit
- 5. modificare a livello l'icona del file eseguibile
- 6. Ottimizzazione per fusione pixel su bitmap Android
- 7. Ridimensionamento di un pulsante in iOS a livello di programmazione
- 8. Come estendere bitmap in WPF senza livellare i pixel
- 9. Come si modifica un file .png a livello di programmazione?
- 10. iOS - Come caricare il file dSYM per le librerie Swift come libswift.foundation.dylib?
- 11. Modifica vincolo a livello di codice Swift
- 12. Come spostare un UIView a livello di programmazione in Swift
- 13. Salva bitmap Immagine a file
- 14. C'è un modo per caricare e disegnare parzialmente una bitmap dal file in Android?
- 15. UIScrollView a livello di codice in Swift
- 16. Come caricare le tessere da una grande bitmap in Android?
- 17. crittografia in iOS a livello di applicazione
- 18. Come analizzare e modificare a livello di codice C#
- 19. Android: conversione di una bitmap in bitmap monocromatica (1 bit per pixel)
- 20. Bitmap Android: Converti pixel trasparenti in un colore
- 21. Come caricare un file audio in MMessage ios 10?
- 22. Allocation.copyTo (Bitmap) valori di pixel corrompenti
- 23. Come modificare la proprietà textLabel in UIButton a livello di codice in iOS?
- 24. Come modificare un volume del dispositivo iOS a livello di programmazione?
- 25. Modificare i file csproj a livello di programmazione
- 26. Passaggio a livello di programmazione rapido swift
- 27. Utilizzo di Glide per caricare bitmap in ImageView
- 28. iOS Swift e localizedStringWithFormat
- 29. CoreData Swift: come salvare e caricare i dati?
- 30. Usa glide per caricare bitmap su ImageView
Questo metodo ha funzionato come un fascino. Per i futuri visitatori: ho adattato questo metodo a swift 1.2 su https://gist.github.com/jokester/948616a1b881451796d6. – Jokester
Sei riuscito a capire come salvare quell'immagine senza alcuna compressione? –