2

这是一件很简单的事情,但我并没有真正接受过 C++ 培训。我只需要获取图像的每个像素值。假设它是“C:\LM3S811\red.bmp”,169x104 像素。

通过围绕该主题进行谷歌搜索,我确信来自 Microsoft SDK 的 gdiplus 应该能够做到这一点。下面是我获取每个像素的红色值的代码:

    #include <iostream>
    #include <windows.h>
    #include <gdiplus.h>
    using namespace Gdiplus;
    using namespace std;
    #pragma comment (lib, "Gdiplus.lib")

    int main(){

        // set bitmap to "C:\LM3S811\red.bmp"
        Bitmap myBitmap (L"C:\\LM3S811\\red.bmp");

        Color pixelColor;

        // print red value of each pixel of 169x104 pixel
        for (int y = 1; y <= 104; y++){
            for (int x = 1; x <= 169; x++){
                myBitmap.GetPixel(x, y, &pixelColor);
                cout << (int)pixelColor.GetRed() << ",";
            }
        }

        // end
        cout << endl;
        system("PAUSE");
        return 0;
    }

当我运行代码时,它总是为所有像素给出零。如果我故意pixelColor用 ieColor pixelColor(0, 255, 255, 255);来设置,那么它会给出正确的值 255。似​​乎myBitmap.GetPixel(x, y, &pixelColor);没有pixelColor正确返回。请让我知道上面代码的错误。

非常感谢您的帮助。谢谢!

4

1 回答 1

1

你的 for 循环应该以 0 开头......像这样:

for (int y = 0; y < myBitmap.GetHeight(); y++){
    for (int x = 0; x < mybitmap.GetWidth(); x++){

否则你的代码对我来说看起来不错......也许你的位图有问题?试过另一个?也许是JPEG?

于 2014-01-09T08:57:31.647 回答