如何在 swiftui 中拖动时从图像中获取像素颜色

How to get pixel color from image while dragging in swiftui

提问人:puneet kumar 提问时间:6/13/2023 最后编辑:tariksunepuneet kumar 更新时间:6/14/2023 访问量:60

问:

我想在 swift UI 中创建自定义颜色选择器,我尝试使用图像并试图找出特定位置的像素。

图片描述在这里

我的解决方案如下:

import SwiftUI
import UIKit

struct ImageColorPicker: View {
    
    @State private var draggedColor: Color = .black
    
    var body: some View {
        VStack {
            Image("Picker")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .gesture(
                    DragGesture(minimumDistance: 0, coordinateSpace: .global)
                        .onChanged { value in
                            if let pixelColor = getPixelColor(at: value.location) {
                                draggedColor = Color(pixelColor)
                            }
                        }
                )
            
            
            Rectangle()
                .fill(draggedColor)
                .frame(width: 100,height: 100)
        }
    }
    
    private func getPixelColor(at point: CGPoint) -> UIColor? {
        guard let image = UIImage(named: "Picker"),
              let cgImage = image.cgImage,
              let pixelData = cgImage.dataProvider?.data else {
            return nil
        }
        
        let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
        let bytesPerPixel = cgImage.bitsPerPixel / 8
        let bytesPerRow = cgImage.bytesPerRow
        let pixelInfo: Int = ((Int(point.y) * bytesPerRow) + (Int(point.x) * bytesPerPixel))
        
        let red = CGFloat(data[pixelInfo]) / 255.0
        let green = CGFloat(data[pixelInfo + 1]) / 255.0
        let blue = CGFloat(data[pixelInfo + 2]) / 255.0
        let alpha = CGFloat(data[pixelInfo + 3]) / 255.0
        
        return UIColor(red: red, green: green, blue: blue, alpha: alpha)
    }
    
    
}

谁能帮我我在这里做错了什么。

SwiftUI 线性渐变 颜色选择器

评论

0赞 Grimxn 11/18/2023
请看我的回答 stackoverflow.com/questions/67018273/...

答: 暂无答案