0

我正在使用 c++ JUCE 库学习 gui 编程。该库支持图像文件格式(png,jpg)。但我想了解如何使用其他文件格式,例如 tiff。

谷歌后我得到了libtiff。

我的问题是显示这个的准确方法是什么。我是否需要将 .tiff 文件从 tiff 转换为 jpeg/png 才能执行此操作。

但我认为这将需要双重处理。

任何人都可以解释原始/原生/基本图像文件格式,以便我需要将所有图像转换为该类型并直接使用它。

当我在 winAPI 中找到一些用于处理图像的东西时,它们使用来自文件格式的图像数据。

如果有人可以让我知道处理图像数据和显示它的方法,那将非常有帮助。

4

3 回答 3

1

任何人都可以解释原始/原生/基本图像文件格式,以便我需要将所有图像转换为该类型并直接使用它。

没有“本机”图像文件格式,但 RGB 接近(尤其是如果您剥离标题以仅给出 Width×Height×Channels 像素值数组)。您可能不想使用它来存储所有内容,因为您的缓冲区会非常大。让您的图书馆处理存储。

如果有人可以让我知道处理图像数据和显示它的方法,那将非常有帮助。

没有“the”方法。C++ 本身并没有说任何关于图像的内容,并且有很多方法可以用来处理它们。您的设计将取决于您的功能需求规范以及可用的库。

我正在使用 c++ JUCE 库学习 gui 编程。该库支持图像文件格式(png,jpg)。但我想了解如何使用其他文件格式,例如 tiff。

谷歌后我得到了libtiff。

我的问题是显示这个的准确方法是什么。我是否需要将 .tiff 文件从 tiff 转换为 jpeg/png 才能执行此操作。

但我认为这将需要双重处理。

如果您的意思是使用 libtiff 将 TIFF 格式的图像转换为 JUCE 支持的格式,那么您说得对,这会引入额外的初始处理步骤。但是,就您所说的而言,听起来简单和清晰的好处会大大,疯狂和巨大地超过任何可能的性能。所以我就这么做。

于 2011-10-19T11:09:21.870 回答
1

为了执行读取 *.tiff 图像之类的操作并在使用 JUCE 框架构建的应用程序中使用它们,我建议创建一个从基本接口 ImageFileFormat 派生的新类。

class MyTiffFormat : public ImageFileFormat
{
  private:
    MyTiffFormat( const MyTiffFormat& );
    MyTiffFormat& operator=( const MyTiffFormat& );

  public:
    MyTiffFormat();
    ~MyTiffformat();

    const String getFormatName();
    bool canUnderStand();
    Image decodeImage( InputStream& input );
    bool writeImageToStream( const Image& source, OuptputStream& dest );

};

实现函数“Image decodeImage(InputSTeram& input)”是你需要像 libtiff 这样的东西的关键。在 JUCE 源代码树中,您将在以下文件夹中找到 PNG 和其他支持格式的实现:\juce\src\gui\graphics\imaging

有关扩展 JUCE 功能的更多信息,请参见JUCE 用户论坛

于 2011-10-19T11:36:25.933 回答
0

Juce 非常适用于 png、jpg 和 gif(非动画),它们可以从文件中读取,甚至可以使用 BinaryBuilder“编译”。

例如,使用 BinaryBuilder 从编译的 c++ 加载它。

someImage = ImageFileFormat::loadFrom (AppResources::image_png, AppResources::image_pngSize);

查看 doxygen 文档,它们很有帮助。使用 BinaryBuilder 编译图像的语法是:

./BinaryBuilder someFolder otherFolder ClassName
于 2013-10-21T22:29:29.640 回答