提问人:puneet kumar 提问时间:6/13/2023 最后编辑:tariksunepuneet kumar 更新时间:6/14/2023 访问量:60
如何在 swiftui 中拖动时从图像中获取像素颜色
How to get pixel color from image while dragging in swiftui
问:
我想在 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)
}
}
谁能帮我我在这里做错了什么。
答: 暂无答案
评论