저는 iOS 11, XCode 9 및 Metal 2로 작업하고 있습니다. MTLTexture
의 픽셀 형식은 bgra8Unorm
입니다. I 인해 pixelFormat documentation에 따라, 픽셀 포맷을 변경할 수bgra8Unorm iOS-Metal 텍스처를 rgba8Unorm 텍스처로 변환하는 방법은 무엇입니까?
금속층에 대한 픽셀 형식 bgra8Unorm, bgra8Unorm_srgb, rgba16Float, BGRA10_XR 또는 bgra10_XR_sRGB이어야한다.
다른 픽셀 형식은 내 응용 프로그램에 적합하지 않습니다.
이제 질감에서 UIImage
을 만들고 싶습니다. 나는 UIImage
얻을이 바이트를 처리하고
getBytes(_:bytesPerRow:bytesPerImage:from:mipmapLevel:slice:)
: 나는 질감 (doc)에서 픽셀 바이트를 추출하여 그렇게 할 수 있어요 그러나
func getUIImageForRGBAData(data: Data) -> UIImage? {
let d = (data as NSData)
let width = GlobalConfiguration.textureWidth
let height = GlobalConfiguration.textureHeight
let rowBytes = width * 4
let size = rowBytes * height
let pointer = malloc(size)
memcpy(pointer, d.bytes, d.length)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let context = CGContext(data: pointer, width: width, height: height, bitsPerComponent: 8, bytesPerRow: rowBytes, space: colorSpace, bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)!
let imgRef = context.makeImage()
let image = UIImage(cgImage: imgRef!)
return image
}
을 CGContext는 픽셀이 있다고 가정 rgba8 형식입니다. 예를 들어, 빨간색 텍스처 픽셀은 최종 UIImage에서 파란색입니다. 적절한 색상을 얻으려면이 과정에서 pixelFormat을 변경하는 방법이 있습니까?
프레임 워크 가속화 방법을 선택 했습니까? https://developer.apple.com/documentation/accelerate/vimage/conversion – Adamsor
메탈 레이어와 다른 텍스처를 사용할 수 있습니다. 이 제한이 존재하기 만해도 드로어 블 텍스처에 그리기와 순차적으로 또는 다른 방법으로 다른 포맷의 텍스쳐로 그릴 수 없다는 것을 의미하지는 않습니다. (먼저 텍스처를 그린 다음 그 텍스처를 드로어 블 텍스쳐에 그리십시오) . –
힌트를 보내 주셔서 감사합니다. – 1awuesterose