我现在需要如何分析BMP,这是最简单的方法。这只是更大程序的一小部分,我确实没有太多时间来做。基本上,我现在只需要黑色的像素和白色的像素的“坐标”。我进行了一些研究,发现以下站点很有趣:
site Isite II

第二个是波兰语,但是上面发布的代码是可以理解的。第一个似乎更复杂(并且只能在Windows上工作,这对我来说是可以的,但我尝试避免这种情况),第二个正在使用vcl.h,它是Borland特定的头文件(我使用VisualStudio)。如果有任何帮助,建议或涉及该主题的站点的链接,我将不胜感激。

PS:如果您不喜欢我提出的问题的方法,请告诉我该做的更好,这是我的第一篇文章。如果您需要其他信息,请询问。

这是代码,感谢您的帮助。

// read_and_send_bmp.cpp
#include <iostream><\code>
#include <string>
#include "bitmap_image.hpp"

using std::string;
using std::cin;
using std::cout;
using std::endl;

char * check(string name_of_bitmap);

int main()
{
    string name_of_bitmap;
    cout << "Name of file: ";
    cin >> name_of_bitmap;
    char * toPrint = check(name_of_bitmap);
    cout << endl << "this is the value of 'toPrint': "<< toPrint;
    /* send
    ...
    */
    system("PAUSE");
    return 0;
}

char * check(string name_of_bitmap)
{
    bitmap_image myBitMapImage(name_of_bitmap);
    int size = myBitMapImage.pixel_count();
    char * toReturn = new char[size+1];
        for(int i = 0; i < myBitMapImage.pixel_count(); i++)
        toReturn[i] = 'f';
     int h = 1;
     for(int j = 0, jlen = myBitMapImage.height(); j < jlen; j++)
    {
        for(int i = 0, ilen = myBitMapImage.width(); i < ilen; i++, h++)
            {
            if(myBitMapImage.red_channel(i, j) == 0 && myBitMapImage.green_channel(i, j) == 0 && myBitMapImage.blue_channel(i, j) == 0)
            {
            toReturn[(j)*myBitMapImage.width()+i] = 'b';
            cout << "pixel nr." << (j)*myBitMapImage.width()+i << " = b" << endl;
            }
            else
            {
            toReturn[(j)*myBitMapImage.width()+i] = 'w';
            cout << "pixel nr." << (j)*myBitMapImage.width()+i << " = w" << endl;
            }
        }
    }
    toReturn[size]='\0';
    return toReturn;
}

最佳答案

IMHO是分析BMP(位图)的最简单方法,是将其转换为一个多维矩阵,每个通 Prop 有一个维度(例如红色,蓝色,绿色,alpha等)。

一旦进入矩阵,就可以使用矩阵代数应用变换。

有一些用于将BMP转换为矩阵的库。在网上搜索“library c++ bmp”。

10-08 07:56
查看更多