gpt4 book ai didi

c++ - 从内存中检索图像数据

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:37 24 4
gpt4 key购买 nike

我正在使用 FreeImage 库来处理加载图像并将它们传递给 OpenGL。目前,我支持从文件中读取图像。但是,为了游戏内容包的目的,我想将其扩展到能够从变量中读取。基本上,简而言之,我将整个文件、文件头和所有内容写入一个 unsigned char *。我想使用这个缓冲区并用它做一些类似的事情(假设变量 fif 被声明):

  FIBITMAP * dib = FreeImage_Load(fif, "someImage.png");

但我想指定 unsigned char * 而不是 someImage.png(为了这个问题,我们称它为缓冲区)。库中有没有可以处理这种事情的方法?

编辑:考虑到“someImage.png”可以被视为 unsigned char *,我应该更具体一些。

为了消除混淆,如果有的话,unsigned char * 缓冲区的值将由如下伪代码确定:

  fileStream = openFile "someImage.png"
unsigned char * buffer = fileStream.ReadToEnd

最佳答案

听起来您想使用 FreeImage_ConvertToRawBits。这是文档中的示例:

   // this code assumes there is a bitmap loaded and
// present in a variable called ‘dib’
// convert a bitmap to a 32-bit raw buffer (top-left pixel first)
// --------------------------------------------------------------
FIBITMAP *src = FreeImage_ConvertTo32Bits(dib);
FreeImage_Unload(dib);
// Allocate a raw buffer
int width = FreeImage_GetWidth(src);
int height = FreeImage_GetHeight(src);
int scan_width = FreeImage_GetPitch(src);
BYTE *bits = (BYTE*)malloc(height * scan_width);
// convert the bitmap to raw bits (top-left pixel first)
FreeImage_ConvertToRawBits(bits, src, scan_width, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, TRUE);
FreeImage_Unload(src);
// convert a 32-bit raw buffer (top-left pixel first) to a FIBITMAP
// ----------------------------------------------------------------
FIBITMAP *dst = FreeImage_ConvertFromRawBits(bits, width, height, scan_width, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, FALSE);

关于c++ - 从内存中检索图像数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6462849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com