使用Gdiplus获取图像的像素值

时间:2014-01-08 00:11:48

标签: colors bitmap gdi+ pixel getpixel

这是一件非常简单的事情,但我并没有真正接受过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来设置Color pixelColor(0, 255, 255, 255);,那么它将给出正确的值255.似乎myBitmap.GetPixel(x, y, &pixelColor);没有正确返回pixelColor。请让我知道上面代码的错误。

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

1 个答案:

答案 0 :(得分:0)

你的for循环应该从0开始......就像这样:

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

否则你的代码对我来说没问题......也许你的位图有问题?尝试了另一个?也许是一个jpeg?