Post

Replies

Boosts

Views

Created

How to set a custom preview image for SwiftUI Drag and Drop on macOS
Is it possible to change the drag and drop preview image. I am currently using the following code but the imagePreviewHandler never gets called and the image is always just a rendering of the visible portion of the gridView ... grid .drag(if: isDraggable, data: {                         return self.dragData()                     }) ...     func dragData()-NSItemProvider{                  let itemProvider = NSItemProvider(object: fileService )                  itemProvider.previewImageHandler = { (handler, _, _) - Void in             os_log("previewImageHandler called")             if let image = NSImage(named: "film") {                 handler?(image as NSSecureCoding?, nil)             } else {                 let error = NSError(domain:"", code:001, userInfo:[ NSLocalizedDescriptionKey: "Unable to create preview image"])                 handler?(nil, error)             }         }         return itemProvider     } struct Draggable: ViewModifier {     let condition: Bool     let data: () - NSItemProvider     @ViewBuilder     func body(content: Content) - some View {         if condition {             content.onDrag(data)         } else {             content         }     } } extension View {     public func drag(if condition: Bool, data: @escaping () - NSItemProvider) - some View {         self.modifier(Draggable(condition: condition, data: data))     } }
1
0
1.7k
Apr ’21
How can I extract the data from the output image of CIAreaHistogramFilter
I would like to get arrays of red, green and blue histogram data from the output of the CIAreaHistogramFilter. My current approach is not working. According to the docs CIAreaHistogramFilter returns an image with width = bin size (256) in my case and height = 1 so each pixel contains the count of the rgb values for that bin. if let areahistogram = self.areaHistogramFilter(ciImage) { let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary var pixelBuffer : CVPixelBuffer? let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(areahistogram.extent.size.width), Int(areahistogram.extent.size.height), kCVPixelFormatType_32ARGB, attrs, &pixelBuffer) guard (status == kCVReturnSuccess) else { return } self.hContext.render(areahistogram, to: pixelBuffer!) CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)); let int32Buffer = unsafeBitCast(CVPixelBufferGetBaseAddress(pixelBuffer!), to: UnsafeMutablePointerUInt32.self) let int32PerRow = CVPixelBufferGetBytesPerRow(pixelBuffer!) var data = [Int]() for i in 0..256 { /* Get BGRA value for pixels */ let BGRA = int32Buffer[i] data.append(Int(BGRA)) let red = (BGRA 16) & 0xFF; let green = (BGRA 8) & 0xFF; let blue = BGRA & 0xFF; os_log("data[\(i)]:\(BGRA) red: \(red) green: \(green) blue: \(blue)") } CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) } results in zeros. data[0]:0 red: 0 green: 0 blue: 0 data[1]:0 red: 0 green: 0 blue: 0 ... data[255]:134678783 red: 7 green: 7 blue: 7 similarly produces a bunch of zeros or this let baseAddress = CVPixelBufferGetBaseAddress(pixelBuffer!) let buffer = baseAddress!.assumingMemoryBound(to: UInt8.self) for i in stride(from: 0, to: 256*4, by: 4) { let blue = buffer[i] let green = buffer[i+1] let red = buffer[i+2] os_log("data[\(i)]: red: \(red) green: \(green) blue: \(blue)") } or this variation that seems simpler var red = [UInt8]()             var green = [UInt8]()             var blue = [UInt8]()             for i in 0..256 {                 // Get BGRA value for pixel                 let BGRA = int32Buffer[i]                 withUnsafeBytes(of: BGRA.bigEndian) {                     red.append($0[0])                     green.append($0[1])                     blue.append($0[2])                 }         }
2
0
1.8k
Apr ’21
SwiftUI Toolbar
Any reason the .toolbar modifier doesn't work in macOS 11 beta? Is there some global setting required in the app to enable this as no toolbar is being shown at all.
1
0
1.2k
Jun ’20
How to set a custom preview image for SwiftUI Drag and Drop on macOS
Is it possible to change the drag and drop preview image. I am currently using the following code but the imagePreviewHandler never gets called and the image is always just a rendering of the visible portion of the gridView ... grid .drag(if: isDraggable, data: {                         return self.dragData()                     }) ...     func dragData()-NSItemProvider{                  let itemProvider = NSItemProvider(object: fileService )                  itemProvider.previewImageHandler = { (handler, _, _) - Void in             os_log("previewImageHandler called")             if let image = NSImage(named: "film") {                 handler?(image as NSSecureCoding?, nil)             } else {                 let error = NSError(domain:"", code:001, userInfo:[ NSLocalizedDescriptionKey: "Unable to create preview image"])                 handler?(nil, error)             }         }         return itemProvider     } struct Draggable: ViewModifier {     let condition: Bool     let data: () - NSItemProvider     @ViewBuilder     func body(content: Content) - some View {         if condition {             content.onDrag(data)         } else {             content         }     } } extension View {     public func drag(if condition: Bool, data: @escaping () - NSItemProvider) - some View {         self.modifier(Draggable(condition: condition, data: data))     } }
Replies
1
Boosts
0
Views
1.7k
Activity
Apr ’21
How can I extract the data from the output image of CIAreaHistogramFilter
I would like to get arrays of red, green and blue histogram data from the output of the CIAreaHistogramFilter. My current approach is not working. According to the docs CIAreaHistogramFilter returns an image with width = bin size (256) in my case and height = 1 so each pixel contains the count of the rgb values for that bin. if let areahistogram = self.areaHistogramFilter(ciImage) { let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue, kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary var pixelBuffer : CVPixelBuffer? let status = CVPixelBufferCreate(kCFAllocatorDefault, Int(areahistogram.extent.size.width), Int(areahistogram.extent.size.height), kCVPixelFormatType_32ARGB, attrs, &pixelBuffer) guard (status == kCVReturnSuccess) else { return } self.hContext.render(areahistogram, to: pixelBuffer!) CVPixelBufferLockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)); let int32Buffer = unsafeBitCast(CVPixelBufferGetBaseAddress(pixelBuffer!), to: UnsafeMutablePointerUInt32.self) let int32PerRow = CVPixelBufferGetBytesPerRow(pixelBuffer!) var data = [Int]() for i in 0..256 { /* Get BGRA value for pixels */ let BGRA = int32Buffer[i] data.append(Int(BGRA)) let red = (BGRA 16) & 0xFF; let green = (BGRA 8) & 0xFF; let blue = BGRA & 0xFF; os_log("data[\(i)]:\(BGRA) red: \(red) green: \(green) blue: \(blue)") } CVPixelBufferUnlockBaseAddress(pixelBuffer!, CVPixelBufferLockFlags(rawValue: 0)) } results in zeros. data[0]:0 red: 0 green: 0 blue: 0 data[1]:0 red: 0 green: 0 blue: 0 ... data[255]:134678783 red: 7 green: 7 blue: 7 similarly produces a bunch of zeros or this let baseAddress = CVPixelBufferGetBaseAddress(pixelBuffer!) let buffer = baseAddress!.assumingMemoryBound(to: UInt8.self) for i in stride(from: 0, to: 256*4, by: 4) { let blue = buffer[i] let green = buffer[i+1] let red = buffer[i+2] os_log("data[\(i)]: red: \(red) green: \(green) blue: \(blue)") } or this variation that seems simpler var red = [UInt8]()             var green = [UInt8]()             var blue = [UInt8]()             for i in 0..256 {                 // Get BGRA value for pixel                 let BGRA = int32Buffer[i]                 withUnsafeBytes(of: BGRA.bigEndian) {                     red.append($0[0])                     green.append($0[1])                     blue.append($0[2])                 }         }
Replies
2
Boosts
0
Views
1.8k
Activity
Apr ’21
Support for Sony Alpha 1 RAW
I guess Apple won't respond to this but does anyone know what the timeline might be for Apple to provide support for the Sony Alpha RAW files. Or what is the typical timeframe to release an update to provide this support ?
Replies
3
Boosts
0
Views
1.7k
Activity
Feb ’21
SwiftUI Toolbar
Any reason the .toolbar modifier doesn't work in macOS 11 beta? Is there some global setting required in the app to enable this as no toolbar is being shown at all.
Replies
1
Boosts
0
Views
1.2k
Activity
Jun ’20