【发布时间】:2014-10-27 16:04:31
【问题描述】:
我从 C 语言开始(我通常使用 Java 或 PHP),但我遇到了 void* 指针类型的问题。
在我的程序中,我从一个外部 API 获取一个像素缓冲区,该缓冲区包含在结构 f 中。 (void*) f -> pixbuf
此指针指向以 BGR24 编码的像素缓冲区。 3 个字节对应一个像素(每种颜色 1 个字节)。
我只想按像素保留 1 个八位字节(像素 = 3 个字节)。但我真的不知道该怎么做。我只是拥有所有这些八位字节的地址(f -> pixbuf)。是否可以通过逐个读取每个八位字节来填充字符选项卡?
PS:f -> pixelbuf的大小是5292000字节
【问题讨论】:
-
我不确定您的确切意思,您是说要将图像转换为 8 位颜色吗?
-
您可以将其转换为例如
unsigned char*这样您就可以一个接一个地读取八位字节。但这听起来像你的图书馆不打算让你这样做,如果它给你一个空余。 -
您是说要将颜色从 24 位 BGR 重新编码为 8 位 rgb,其中 3 位用于红色和绿色,2 位用于蓝色?
-
是的,我想将图像从 24 位转换为 8 位。图像是灰色的,所以我不需要 3 像素。但我只有指向像素缓冲区的指针,一个 void* 指针。
-
@LaurentJerber 等等,再澄清一次,你想把它变成一个 8 位灰度图吗?丢失颜色数据并因此将图像缩小三分之二?