簡體   English   中英

在設備(iOS)上編碼ASTC?

[英]Encode ASTC on device (iOS)?

是否有任何庫能夠按需將圖像數據編碼為ASTC紋理? 我知道這是CPU密集型的,但無論如何還是有興趣的。

在iOS 10中,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

其他可能的標志是kCGImagePropertyASTCUseLZFSEkCGImagePropertyASTCPreTwiddlekCGImagePropertyASTCFlipVerticallykCGImagePropertyASTCWeightChannelsEqually (所有kCGImagePropertyASTCWeightChannelsEqually )。

https://github.com/ARM-software/astc-encoder是參考壓縮器(由ARM和AMD創建)。 使源代碼在iOS設備上工作可能並不難。 它可能會慢得讓人望而卻步,但是它確實提供了多種速度選擇,因此也許您會在質量和速度之間找到合適的平衡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM