在设备上编码 ASTC (iOS)?
Encode ASTC on device (iOS)?
有没有库可以按需将图像数据编码为ASTC纹理?
我知道这是 CPU 密集的,但无论如何我都很感兴趣。
https://github.com/ARM-software/astc-encoder 是参考压缩器(由 ARM 和 AMD 创建)。让源代码在 iOS 设备上运行可能并不难。它可能慢得令人望而却步,但它确实提供了多种速度选项,因此也许有人会为您在质量和速度之间取得适当的平衡。
在iOS10,Apple在系统中添加了ASTC编码。您可以通过 /usr/include/AppleTextureEncoder.h、/usr/lib/libate.dylib 或(更简单)使用通过 CG / ImageIO.framework 提供的常用图像编码实用程序编码为 ASTC 来访问它。请参阅 CGImageDestination 和相关对象。也可以通过 Xcode.
中的图像资产目录压缩来获取它
系统 ASTC 编码器比 ARM 参考编码器快得多。支持块大小 4x4 和 8x8。性能应该类似于 JPEG 或 PNG 编码。
import ImageIO
import MetalKit
let loader: MTKTextureLoader
let srcImage: CGImage
let ktxData = NSMutableData()
let dest = CGImageDestinationCreateWithData(ktxData, "org.khronos.ktx" as CFString, 1, nil)!
CGImageDestinationAddImage(dest, srcImage, 0, ["kCGImagePropertyASTCBlockSize": 0x88] as CFDictionary)
CGImageDestinationFinalize(dest)
try loader.newTexture(data: ktxData as Data, options: [])
显示的 kCGImagePropertyASTCBlockSize
选项为您提供 8x8 块大小(即每像素 2 位);唯一允许的大小是 4x4(每像素 8 位),这是默认值。
为了获得最佳性能,请将 kCGImageDestinationLossyCompressionQuality: 0.0
添加到 CGImageDestinationAddImageFromSource
的选项中。
其他可能的标志是 kCGImagePropertyASTCUseLZFSE
、kCGImagePropertyASTCPreTwiddle
、kCGImagePropertyASTCFlipVertically
和 kCGImagePropertyASTCWeightChannelsEqually
(所有布尔值)。
有没有库可以按需将图像数据编码为ASTC纹理? 我知道这是 CPU 密集的,但无论如何我都很感兴趣。
https://github.com/ARM-software/astc-encoder 是参考压缩器(由 ARM 和 AMD 创建)。让源代码在 iOS 设备上运行可能并不难。它可能慢得令人望而却步,但它确实提供了多种速度选项,因此也许有人会为您在质量和速度之间取得适当的平衡。
在iOS10,Apple在系统中添加了ASTC编码。您可以通过 /usr/include/AppleTextureEncoder.h、/usr/lib/libate.dylib 或(更简单)使用通过 CG / ImageIO.framework 提供的常用图像编码实用程序编码为 ASTC 来访问它。请参阅 CGImageDestination 和相关对象。也可以通过 Xcode.
中的图像资产目录压缩来获取它系统 ASTC 编码器比 ARM 参考编码器快得多。支持块大小 4x4 和 8x8。性能应该类似于 JPEG 或 PNG 编码。
import ImageIO
import MetalKit
let loader: MTKTextureLoader
let srcImage: CGImage
let ktxData = NSMutableData()
let dest = CGImageDestinationCreateWithData(ktxData, "org.khronos.ktx" as CFString, 1, nil)!
CGImageDestinationAddImage(dest, srcImage, 0, ["kCGImagePropertyASTCBlockSize": 0x88] as CFDictionary)
CGImageDestinationFinalize(dest)
try loader.newTexture(data: ktxData as Data, options: [])
显示的 kCGImagePropertyASTCBlockSize
选项为您提供 8x8 块大小(即每像素 2 位);唯一允许的大小是 4x4(每像素 8 位),这是默认值。
为了获得最佳性能,请将 kCGImageDestinationLossyCompressionQuality: 0.0
添加到 CGImageDestinationAddImageFromSource
的选项中。
其他可能的标志是 kCGImagePropertyASTCUseLZFSE
、kCGImagePropertyASTCPreTwiddle
、kCGImagePropertyASTCFlipVertically
和 kCGImagePropertyASTCWeightChannelsEqually
(所有布尔值)。