【问题标题】:Reading .bmp(24 bit) into a 2D array将 .bmp(24 位)读入二维数组
【发布时间】:2013-05-28 07:37:06
【问题描述】:

我完全是初学者。我会尽可能多地解释自己。

int i, j;
string filename;
cout << "Please enter the file name: " << endl; 
cin >> filename; 
fstream stream;

stream.open(filename.c_str(), 
    ios::in|ios::out|ios::binary);

int file_size = get_int(stream, 2); 
int start = get_int(stream, 10); 
int width = get_int(stream, 18); 
int height = get_int(stream, 22);

这部分应该获取文件及其值。

for ( i = 0; i < height; i++ )
    {
        for ( j = 0; j < width; j++)
        {
            for (int k = 0; k < split*split; k++){

                int pos = stream.tellg();
                int blue = stream.get(); 
                int green = stream.get(); 
                int red = stream.get();

这会到达每个像素内部并获取 RBG 值。

我想要的是首先将 RBG 值存储到一个二维数组中,然后对该数组进行一些操作。然后我想创建一个带有操作图像的新文件。

我不知道,所以一些说明和一些代码会很有帮助。

【问题讨论】:

  • 代码here
  • 我推荐使用 OpenCV,使用它读取图像需要两行代码。
  • Ty mate,但如果可能的话,我想在没有任何库的情况下这样做。

标签: c++ arrays bmp


【解决方案1】:

Bmp 文件格式在许多地方都有记录。例如,on wikipedia

最简单的方法是实现描述bmp头的结构,一次读取整个结构,然后读取单个像素。

由于您没有读取文件签名 - 标头的“BM”字段,您的读取功能已损坏并且无法运行。

在某些操作系统上,已经有用于读取 BMP 的结构和功能。在 Windows 上,有 BITMAPFILEHEADER。使用这些结构意味着您没有使用“纯 C++”。

如果您仍想自己阅读 BMP,请阅读有关 bmp 的 msdn 文章或 google 以获取“阅读 bmp 文件”教程。

【讨论】:

    【解决方案2】:

    这个库很容易使用http://easybmp.sourceforge.net/。加载文件后,您可以轻松检查 RGB 值。

    【讨论】:

    • 是的,但都是用纯 c++ 来做的 :)
    • 建议的 lib 是纯 c++ (很少有标题和正文),所以你可以偷看它并从中获取代码的有趣部分;p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2015-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多