c++ - 如何获取元素的个数

标签 c++ c visual-c++

我正在用 C++ 开发一个应用程序,我需要知道变量的元素数量。我正在寻找如何做到这一点,但我无法找到解决方案。该变量的定义方式如下:

unsigned char *values = (unsigned char *) some_function(some_parameter);
// "some_function" takes "some_parameter" and fills "values" correctly

预先感谢您提供的任何帮助。

致以诚挚的问候。

最佳答案

既然您告诉我们您正在使用哪个函数 ( FreeImage::GetBits ),我们现在知道您正在查询图像的原始数据。它的大小是图像的间距和高度的乘积,如以下公式所示:

int size = image.GetPitch() * image.GetHeight();

这是以字节为单位的大小,即访问char指针时的元素数量。但是在这种情况下谈论“元素数量”(我们谈论一些低级内存,没有高级类型的位流)有点误导,因为在阅读问题时,人们可能会认为这是关于更高级别的内存。级别数组

如果您想知道:原始图像数据通常以 pitch 大小的行排列,从左到右一个像素一个像素地排列,其中每个像素的大小可能取决于某些存储格式(例如 1 字节灰度、3 字节 RGB(每 channel 8 位)、单色位图 1 位以及更多格式)。

这些行从上到下排列(在大多数情况下),有时从下到上排列(例如,在 BMP 文件格式的情况下)。间距至少是图像的宽度乘以每个像素的大小,因此所有像素在这样的“扫描线”中都有空间,这就是这样的存储器如何称为图像的线。它被舍入到某种对齐方式,因此每一行都可以从整个图像内存中的对齐地址开始。未使用的空间称为“填充”并被忽略。

根据库的不同,有时“间距”表示内存中的“每行像素”,而不是“每行字节数”,但在这种情况下,它已经以字节为单位给出 所以你只需乘以图像高度。请注意,通常高度不会像宽度一样被填充,因为这样做没有任何优势。

关于c++ - 如何获取元素的个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18961465/

相关文章:

在c中连续接收udp套接字

c++ - VS2010 中的 "redefinition; different type modifier"

c++ - 如何在ATL/WTL对话框上注册自定义控件?

c++ - VisualC 2010、项目引用和包含路径

c++ - 在 openmp 中使用不同线程组装 vector 时缩放比例不佳

c - 如何在 c 中执行带符号的右移 (>>)?

c - 分配和排序现有结构的指针数组

c++ - 在 C++ 中使用定义的 header 调用函数

c++ - 不应该使用 Float 6 和 Double 15 可用数字吗?

c++ - 如何确保 n 位中至少有 m 位打开?