程序如何与图形库交互?

时间:2019-03-03 14:38:46

标签: graphics

我想制作自己的图像格式和一个图书馆以供阅读。

我已经尝试过多次,以使人们了解这些信息,他们都说“去研究现有的图形SDK之一”,但是我做到了,它什么也没教给我,只是教了我如何使用Open GL。那不是我想要的。我想知道程序打开图像时发生的内部工作,因此我可以在自己的库中手动处理此操作。

我研究了多种图像格式,我知道它们中的信息是如何构造的,但是在程序打开它们之后,它必须知道如何将它们转换为RGBA数组,对吗?我想这就是图形库的来源吗?

图形库是有关如何假定图像以十六进制颜色数组形式读取图像的指令列表?所以实际上我有3个问题,希望我能将它们弄清楚:

1:当程序带有图像文件时,该怎么办?例如,它是否在查找带有该文件扩展名的图形库(以及在哪里?),然后阅读将其转换为颜色值列表的规则?还是直接将其转换为机器代码并将其存储在内存中?

2:如果我编写了这些图形库之一,我将如何确保程序可以找到它?通常(给出一个图像编辑器或游戏引擎或Windows图片预览等示例),程序会自动查看新的图像库吗?或者我需要修改程序以知道它的存在吗? (这个答案会让我知道这会带来多少麻烦)

3:所有图形应用程序都以某种标准数据格式存储图像颜色数据吗?

2 个答案:

答案 0 :(得分:0)

1:尽管某些程序可能使用文件扩展名,但大多数程序会查看标头数据。大多数格式都具有某种标题,该标题提供确定信息处理方式的信息,因此可能会询问该库:“此文件的标题看起来像您可以访问的一种文件吗?”

以下是用于解码许多程序(包括Gimp:https://sourceforge.net/p/libpng/code/ci/master/tree/png.c

)使用的png文件的库的示例。

它以称为png_int_32的32位整数的形式返回颜色数据。在此页面底部,您可以看到Gimp用于解码各种图像格式的库的列表:https://www.gimp.org/source/#gimp-source-code

2:有些程序被硬编码为使用特定的库,并且不能使用新格式进行扩展。较大的图形程序(例如Photoshop或Gimp)使用插件。您将必须创建将库用于想要支持的程序的插件。以下是创建Gimp插件的方法:https://developer.gimp.org/writing-a-plug-in/1/index.html

以下是创建Photoshop插件的方法:https://www.adobe.io/apis/creativecloud/photoshop.html

要使程序像那些程序一样可扩展,需要付出额外的精力,所以很多人都不会打扰。您只能在支持插件或开放源代码的程序中使用您的库,因此您可以将库添加到该程序的自己的版本中。

3:以32位整数存储图像数据是相当标准的。易于使用,易于在内存中对齐等。

答案 1 :(得分:0)

  

1:当程序带有图像文件时,该怎么办?

通常会要求操作系统对图像进行解码。操作系统可能会使用许多LibTIFFlibpnglibjpeg等库。

通过使用操作系统,而不是直接尝试读取图像文件,应用程序可以使用库的最新版本来获得操作系统的好处。因此,如果您今天编写了一个应用程序,并且从现在起5年后不再对其进行更新,那么如果使用OS进行操作,它可能能够读取给定文件格式的较新版本。

  

例如,它会查找具有该文件扩展名作为其名称(以及在何处?)的图形库,然后阅读将其转换为颜色值列表的规则吗?

通常,操作系统提供更高级别的界面。例如,在macOS上,有CoreGraphicsImageIO

  

还是将其直接转换为机器代码并将其存储在内存中?

图像文件中不涉及任何机器代码。 (嗯,通常不会。我确定有人在某处完成了此操作。)图像文件通常仅以简单的方式存储数据。该库可以解压缩和/或解码数据,并且此时您可能拥有RGBA(或类似ARGB或BGRA的变体)或YCbCr或类似的东西。操作系统可能会进行进一步转换,以获取呼叫者请求的确切数据类型。

  

2:如果我编写了这些图形库之一,我将如何确保程序可以找到它?

通常,有一种方法可以在操作系统中注册图像编解码器,以便程序可以使用它。这取决于操作系统。

  

通常情况下(以图像编辑器或游戏引擎为例,或Windows图片预览等为例),程序会自动查看新的图像库吗?或者我需要修改程序以知道其存在吗? (这个答案会让我知道这会带来多少麻烦)

这因程序而异。有些仅允许特定格式,有些将使用操作系统支持的任何格式。有些还增加了对操作系统通常不支持的其他格式的支持。例如,Photoshop允许开发人员编写自己的图像导入器和导出器。如果用户安装了您的导入器/导出器,他们将获得该功能,否则将无法(除非操作系统支持)。

  

3:所有图形应用程序都以某种标准数据格式存储图像颜色数据吗?

有一些常见的-广泛支持.png,.jpg和.tif。即使不是.psd(Photoshop)文件在很多情况下也可以处理,尽管并非在所有情况下都可以使用所有功能。