我需要对一幅BMP图片进行像素及的操作,首先用GetPixel读入图像各像素的色彩值到一个数组,截取其中某一区域后,将这一区域的像素值赋到另一个数组,在利用SetPixel将这一数组中的像素值输出到一幅新的BMP图像中(覆盖),从而得到原图像中的某一特定区域图像。基本思想是这样,但刚开始学编程,很多东西不熟,还得
从头问起。我写了个代码,如下:----------------------------------------------------------------------- unsigned char pixels[300][300];
unsigned char range[100][100]; Bitmap myBitmap = new Bitmap("campus.bmp");
for (y=0;y<myBitmap.Width;y++)
for (x=0;x<myBitmap.Height;x++)
pixels[y][x] = myBitmap.GetPixel(x, y);
          ...... Bitmap myBitmap2 = new Bitmap("show.bmp"); for (x=0;x<myBitmap2.Width;x++)
for (y=0;y<myBitmap2.Height;y++)
myBitmap2.SetPixel(x, y, range[x][y]);----------------------------------------------------------------------
有几个问题:1. 刚一编译就不能通过,好像需要gdi32.lib和gdiplus.lib,可我写了#include这俩以后,编译又说找不到它们,请问如何才能找到正确的库文件(使用GetPixel和SetPixel)?2. 用普通的数组unsigned char可以接收GetPixel的返回值么?这个返回只好像是什么Color类型的,应该怎样存起来呢?最好是以数组的形式,这样截取区域比较好操作,用几个for循环就行了。3. 对最后的SetPixel的使用也有问题,好像在x,y之后也应该是一个color型的量来给该像素赋值(MSDN给的例子好像是Color.Black什么的)。而我直接就拿数组上了,肯定有错可没办法啊,我需要用数组来存某一区域中每个像素的色彩值,除了数组也想不出什么好办法。如果这样输出的时候该怎么办呢?还有一点,这个截取图像某一区域,覆盖到一个新BMP图的程序需要在另外一个VB的主程序中调用,因此要写成DLL,我没写过DLL,请问是不是用VC带的那个Wizard生成后把这段代码直接加进去就行了?刚开始学编程,问的可能有些弱,大家多多帮助我,谢了~~~

解决方案 »

  1.   

    1.Bitmap这个类,需要包含头文件:Gdiplus.h.2.GetPixel返回的是状态值,不是颜色信息,它的第
    三个参数是一个Color类类型指针,是返回颜色信息的。
    你可以用个Color类型数组,
    如果你想转化为COLORREF 可以用Color.toCOLORREF获得。
    COLORREF 是个DWORD类型的,
    定义是这样的:0x00bbggrr
                      ~~~~~~分别为蓝,绿,红色值。
    你用unsigned char 是不行的,你也可以用DWORD类型数组嘛3.见2.:)
      

  2.   

    多谢你啊土狗,可我试了Gdiplus.h,编译还是通不过,说什么"can't include....no such file in the directory",是不是Gdiplus.h没有放在头文件的默认目录下啊,到哪里去找呢?还有关于转化COLORREF,是不是可以这样:         typedef DWORD COLORREF[300][300];
    Bitmap myBitmap = new Bitmap("campus.bmp");
    for (y=0;y<myBitmap.Width;y++)
    for (x=0;x<myBitmap.Height;x++)
     myBitmap.GetPixel(x, y,COLORREF[y][x]);但对于SetPixel()来说,能像下面这样直接用DWORD的数组来传么? Bitmap myBitmap2 = new Bitmap("show.bmp");
    for (x=0;x<myBitmap2.Width;x++)
    for (y=0;y<myBitmap2.Height;y++)
    myBitmap2.SetPixel(x, y, COLORREF[x][y]);能不能结合一个实例说明一下,多谢了~~~
      

  3.   

    还有关于DLL的问题,那位大虾再给指点一下 ;)
      

  4.   

    我试了,还是不行啊,gdiplus.h这个文件到底存在哪个路径上了?
    编译是老说there is no such file in the directory