根据官方网站 GitHub - KhronosGroup/KTX-Software: KTX (Khronos Texture) Library and Tools

ktx2库依赖了一堆奇奇怪怪得汇编等东西, 不适合封装成跨平台得库, 遂自行将源码抽出封装成库, 先说其他图片转为ktx2得流程:

首先将jpg或者png等其他格式用相应得库读成内存像素;

再选择ktx2得编码范式: 主要有两种可选:(Basis和Astc) 其中(Basis内又分为使用 uastc与否)

具体调用选ETC1S或者 uastc使用ktxTexture2_CompressBasisEx

选astc使用ktxTexture2_CompressAstcEx

最后是否用zstd压缩(Basis不使用uastc将zstd调用失败),输出成文件;

调用代码如下:

     ktxTexture* ktx2; //ktx_error_code_e err;ktx_error_code_e result;ktxTextureCreateInfo createInfo;//createInfo.glInternalformat = 32856;//GL_RGB8;   // Ignored if creating a ktxTexture2.createInfo.vkFormat = ToKtx2VkFormat(img->RGBAType());//VK_FORMAT_R8G8B8_UNORM;   // Ignored if creating a ktxTexture1.createInfo.baseWidth = img->Width();createInfo.baseHeight = img->Height();createInfo.baseDepth = 1;createInfo.numDimensions = 2;createInfo.numLevels = 1;//log2(max_dim) + 1;createInfo.numLayers = 1;createInfo.numFaces = 1;createInfo.isArray = KTX_FALSE;createInfo.generateMipmaps = KTX_FALSE;result = ktxTexture2_Create(&createInfo, ktxTextureCreateStorageEnum::KTX_TEXTURE_CREATE_ALLOC_STORAGE, (ktxTexture2**)&ktx2);result = ktxTexture_SetImageFromMemory(ktx2, 0, 0, 0, (ktx_uint8_t*)img->Bit(), ktx2->dataSize);if (KTX_SUCCESS != result){GS_E << " failed to create ktxTexture2; " << ktxErrorString(result);return false;}int threadcount = std::thread::hardware_concurrency() / 4;if (threadcount <= 0)threadcount = 1;if (1 >= m_CompressType){ktxBasisParams params = {};params.structSize = sizeof(params);params.threadCount = threadcount;params.uastc =  m_CompressType;//0 默认ETC1S/BLZ  1 uastcparams.compressionLevel = KTX_ETC1S_DEFAULT_COMPRESSION_LEVEL;params.qualityLevel = m_QualityLevel;result = ktxTexture2_CompressBasisEx((ktxTexture2*)ktx2, &params);// ktx_uint32_t(m_QualityLevel / 12));}else{ktxAstcParams params{};params.structSize = sizeof(params);params.threadCount = threadcount;params.blockDimension = KTX_PACK_ASTC_BLOCK_DIMENSION_6x6;params.mode = KTX_PACK_ASTC_ENCODER_MODE_LDR;params.qualityLevel = KTX_PACK_ASTC_QUALITY_LEVEL_MEDIUM;params.normalMap = false;if (m_QualityLevel >= KTX_PACK_ASTC_QUALITY_LEVEL_FASTEST)params.qualityLevel = KTX_PACK_ASTC_QUALITY_LEVEL_FASTEST;if (m_QualityLevel >= KTX_PACK_ASTC_QUALITY_LEVEL_FAST)params.qualityLevel = KTX_PACK_ASTC_QUALITY_LEVEL_FAST;if (m_QualityLevel >= KTX_PACK_ASTC_QUALITY_LEVEL_MEDIUM)params.qualityLevel = KTX_PACK_ASTC_QUALITY_LEVEL_MEDIUM;if (m_QualityLevel >= KTX_PACK_ASTC_QUALITY_LEVEL_THOROUGH)params.qualityLevel = KTX_PACK_ASTC_QUALITY_LEVEL_THOROUGH;if (m_QualityLevel >= KTX_PACK_ASTC_QUALITY_LEVEL_EXHAUSTIVE)params.qualityLevel = KTX_PACK_ASTC_QUALITY_LEVEL_EXHAUSTIVE;result = ktxTexture2_CompressAstcEx((ktxTexture2*)ktx2, &params);}if (m_DeflateUseZstd){result = ktxTexture2_DeflateZstd((ktxTexture2*)ktx2, ktx_uint32_t(m_QualityLevel / 12));}if (KTX_SUCCESS != result){GS_E << " failed to deFlate ktxTexture2; " << ktxErrorString(result);return false;}if (m_Buffer) {m_Buffer->Allocate(0);ktx_uint8_t* pHead = nullptr;ktx_size_t size =0;ktxTexture_WriteToMemory(ktx2, &pHead, &size);m_Buffer->Append(pHead, size);}else {ktxTexture_WriteToNamedFile(ktx2, m_file.c_str());}return true;

做了多年开发, 但是图像解析库各有千秋, 特别是设计到三维得图片纹理编解码其实乱得很,遂将所有库整理为一套库,供大家使用, 图像编解码库封装库(PNG,JPG,WEBP,KTX1和2,tif,SVG) 基本上所有常见类型得库都可以支持, 但是没有封装统一操作, 可以直接嵌入代码即可.

KTX2标准定义:

KTX File Format Specification

KTX相关资料:

3D-Formats-Guidelines/KTXArtistGuide.md at main · KhronosGroup/3D-Formats-Guidelines · GitHub
https://github.com/KhronosGroup/DataFormat

GitHub - KhronosGroup/KTX-Software: KTX (Khronos Texture) Library and Tools

将JPG,PNG图像转为ktx2相关推荐

  1. 彩色RGB图像转为灰度图像

    将彩色RGB图像转为灰度图像,其中像素值的转换为 灰度值=0.2989 * R + 0.5870 * G + 0.1140 * B 原彩色RGB图像是三通道的,转换成单通道的灰度图像 自己写了一个Py ...

  2. python输出jpg_利用python实现.dcm格式图像转为.jpg格式

    如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...

  3. python bmp转jpg_利用python实现.dcm格式图像转为.jpg格式

    如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...

  4. 将图像转为特征值_用K均值进行图像分割

    个人学习笔记:采用聚类方法对图像进行分割,以下内容纯粹个人理解,如有错误请帮我指出!多谢! 图像分割就是把图像按照某些条件分成不同的区域,并提取出感兴趣的区域.传统的分割方法包括基于阈值的分割.基于区 ...

  5. python图片保存jpg、show变成bmp_利用python实现.dcm格式图像转为.jpg格式

    如下所示: import pydicom import matplotlib.pyplot as plt import scipy.misc import pandas as pd import nu ...

  6. 用python将.dcm格式图像转为.jpg格式

    用python将.dcm格式图像转为.jpg格式 import pydicom import matplotlib.pyplot as plt import scipy.misc import pan ...

  7. 如何将深度学习的float32图像转为Unit8格式以方便cv2使用

    在使用Pyside2中的 QImage处理深度学习模型生成的图片时,需要将float32的图像转为Unit8格式,再使用cv2处理. 一开始使用网上的其他教程,如下: # 模型生成G_recon = ...

  8. 使用TensorFlow进行常用的图像处理-图像转为矩阵以及图像大小调整

    图像编码处理 将图像转为一个三维矩阵,并使用三维矩阵形成一个图像: import tensorflow as tf import matplotlib.pyplot as plt# 读取原始图像数据 ...

  9. 使用GDAL将12bit量化图像转为16bit或者8bit

    很多遥感卫星数据使用的量化级别都要比8bit高,比如常用的WorldView用的是12bit的量化,对于一些图像处理软件,是不能直接处理12bit量化的图像,所以需要将12bit的数据转为16bit数 ...

最新文章

  1. 旷视砸20亿进军AIoT,发布国内首个机器人协作大脑河图
  2. MyEclipse快捷键大全(绝对全)
  3. 23万小鹏P7,到底够不够格PK国产特斯拉
  4. linux c 复制拷贝文件
  5. torch 特征对齐
  6. shell实例第8讲:seq命令
  7. BeanFactory笔记
  8. python list 去重_Python中对列表list去重
  9. Windows进程与线程学习笔记(四)—— 等待链表调度链表
  10. css 旋转45_CSS教程——第14期
  11. Java中常量定义在interface和class的区别(转)
  12. 命令行参数的作用_Rasa 聊天机器人专栏(二):命令行界面
  13. 抗菌药物敏感性检测仪行业调研报告 - 市场现状分析与发展前景预测
  14. NickLee UI中间件 for asp.net 2.0版本
  15. ndk-build生成.so
  16. NYOJ77 - 开灯问题
  17. 网管工具之cacti
  18. Nitrux安装JDK-10(Linux通用)教程
  19. Cocos--开启物理
  20. Spring Data ElasticSearch analyzer 定义 @Filed失效 @Mapping失效 创建索引 无效 解决办法 ElasticsearchRestTemplate

热门文章

  1. 法学论文应该注重论证形式
  2. 死磕java底层(三)—反射、动态代理和注解
  3. MT4开发文档之 Server API: Hooks and Trade Functions
  4. 第十三周项目一(4)——验证平衡二叉树相关算法
  5. 模拟考试 9.16 (期望dp)
  6. 乌拉姆数列 Euler167
  7. c# winform中获取当前日期和时间
  8. Signal ()函数用法和总结
  9. go语言制作gif动画
  10. 如何把7zip设置为默认解压工具