怎么样将bmp黑白图,转换成点阵数组形式???
例如下面转换后的数组例如:这里是c语言的数组
unsigned char sellpixel[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 240, 0, 0, 0, 0, 0, 3, 255, 255, 0, 0, 0,
0, 0, 15, 255, 255, 192, 0, 0, 0, 0, 63, 255, 255, 240, 0, 0, 0, 0, 127, 255, 240, 248, 0, 0, 0, 1, 255, 255, 224, 126, 0, 0,
0, 3, 255, 255, 224, 127, 0, 0, 0, 15, 255, 255, 0, 7, 192, 0, 0, 31, 255, 254, 0, 1, 224, 0, 0, 63, 255, 252, 0, 0, 240, 0,
0, 127, 255, 252, 0, 0, 248, 0, 0, 127, 255, 224, 0, 0, 56, 0, 0, 255, 255, 192, 0, 0, 12, 0, 1, 255, 255, 192, 0, 0, 14, 0,
1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 96, 0, 0, 56, 0, 128, 4, 0, 120, 0, 7, 57, 192, 128,
8, 0, 56, 0, 15, 57, 224, 64, 8, 0, 48, 0, 14, 59, 128, 64, 16, 0, 48, 0, 28, 63, 12, 32, 16, 0, 48, 0, 60, 60, 12, 32,
16, 0, 48, 224, 124, 120, 12, 32, 16, 96, 48, 112, 205, 216, 60, 32, 32, 112, 48, 115, 140, 15, 248, 16, 32, 112, 48, 112, 12, 0, 0, 16,
32, 112, 51, 224, 12, 63, 0, 16, 32, 112, 254, 224, 7, 231, 0, 16, 32, 255, 240, 224, 6, 7, 0, 16, 32, 248, 48, 0, 6, 119, 0, 16,
32, 0, 48, 0, 6, 119, 0, 16, 32, 0, 48, 0, 6, 119, 0, 16, 32, 96, 48, 224, 6, 103, 0, 16, 32, 48, 48, 112, 14, 103, 0, 16,
16, 48, 48, 112, 6, 103, 0, 32, 16, 48, 55, 240, 0, 248, 0, 32, 16, 99, 252, 112, 1, 206, 0, 32, 16, 255, 128, 112, 1, 143, 128, 32,
8, 248, 0, 112, 7, 7, 192, 64, 8, 96, 0, 96, 14, 3, 192, 64, 4, 0, 0, 0, 56, 1, 192, 128, 2, 0, 0, 0, 0, 0, 1, 0,
1, 192, 0, 0, 15, 255, 254, 0, 0, 192, 0, 0, 15, 255, 252, 0, 0, 112, 0, 0, 31, 255, 248, 0, 0, 124, 0, 0, 255, 255, 248, 0,
0, 60, 0, 0, 255, 255, 240, 0, 0, 30, 0, 1, 255, 255, 224, 0, 0, 15, 128, 3, 255, 255, 192, 0, 0, 3, 248, 31, 255, 255, 0, 0,
0, 1, 248, 31, 255, 254, 0, 0, 0, 0, 124, 63, 255, 248, 0, 0, 0, 0, 63, 255, 255, 240, 0, 0, 0, 0, 15, 255, 255, 192, 0, 0,
0, 0, 3, 255, 255, 0, 0, 0, 0, 0, 0, 63, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 160,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

解决方案 »

  1.   

    大概就是这个样子,效率奇低的那种(随手写的,没有测试,自己测试一下)。当然,你也可以用ScanLine改进它。var
      byTmp : BYTE;
      nFlag : Integer;
      nIndex: Integer;  sellpixel: array of BYTE;
    begin
      SetLength(sellpixel, Image1.Width * Image1.Height);  nFlag := 0;
      nIndex:= 0;
      byTmp := 0;  for x:= 0 to Image1.Width - 1 do
      begin
        for y:= 0 to Image1.Height - 1 do
        begin
          if (GetPixel(Image1.Canvas.Handle, x, y) = $FFFFFF) then
            byTmp:= BYTE((byTmp shl 1) or 1)
          else
            byTmp:= BYTE(byTmp shl 1);      inc(nFlag);
          if (nFlag >= 8) then
          begin
            sellpixel[nIndex]:= byTmp;
            inc(nIndex);
            nFlag:= 0;        byTmp:= 0;
          end;
        end;
      end;
    end;
      

  2.   

    把整数转换为String就可以显示了。
      

  3.   


    这是读取24位图的程序type
      Trgb=record
        b:byte;
        g:byte;
        r:byte;
      end;
    var
      pic: array of array of byte;
    procedure bmptoarray(path: string);
    var
      i,j,x,y:      integer;
      stream:     Tmemorystream;
      rgb:        array of Trgb;
      bfh:       BITMAPFILEHEADER;//位图文件头
    bih:       BITMAPINFOHEADER; //位图信息头
    begin
      Stream := TMemoryStream.Create;
      stream.LoadFromFile(path);
      stream.Position:=0;
      stream.Read(bfh,sizeof(BITMAPFILEHEADER));
      stream.Read(bih,sizeof(BITMAPINFOHEADER));
      setlength(rgb,bih.biWidth*bih.biHeight);
      setlength(pic,bih.biWidth,bih.biHeight);
      for i:=0 to length(rgb)-1 do
        stream.Read(rgb[i],sizeof(Trgb));
      stream.Free;
      for i:=0 to bih.biWidth*bih.biHeight-1 do
      begin
        x:=i MOD bih.biWidth;
        y:=i div bih.biWidth;
        pic[x,bih.biHeight-y]:=round(0.11*rgb[i].b+0.3*rgb[i].r+0.59*rgb[i].g);//这里你可以进行黑白处理
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i,j:integer;
    begin
      bmptoarray('d:\7.bmp');
    end;
      

  4.   


    怎么输出pic 到 string ???
      

  5.   

    哦.我是想把内容显示到如MEMO里,或者txt里0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 240, 0, 0, 0, 0, 0, 3, 255, 255, 0, 0, 0, 
    0, 0, 15, 255, 255, 192, 0, 0, 0, 0, 63, 255, 255, 240, 0, 0, 0, 0, 127, 255, 240, 248, 0, 0, 0, 1, 255, 255, 224, 126, 0, 0, 
    0, 3, 255, 255, 224, 127, 0, 0, 0, 15, 255, 255, 0, 7, 192, 0, 0, 31, 255, 254, 0, 1, 224, 0, 0, 63, 255, 252, 0, 0, 240, 0, 
    0, 127, 255, 252, 0, 0, 248, 0, 0, 127, 255, 224, 0, 0, 56, 0, 0, 255, 255, 192, 0, 0, 12, 0, 1, 255, 255, 192, 0, 0, 14, 0, 
    1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 96, 0, 0, 56, 0, 128, 4, 0, 120, 0, 7, 57, 192, 128, 
    8, 0, 56, 0, 15, 57, 224, 64, 8, 0, 48, 0, 14, 59, 128, 64, 16, 0, 48, 0, 28, 63, 12, 32, 16, 0, 48, 0, 60, 60, 12, 32, 
    16, 0, 48, 224, 124, 120, 12, 32, 16, 96, 48, 112, 205, 216, 60, 32, 32, 112, 48, 115, 140, 15, 248, 16, 32, 112, 48, 112, 12, 0, 0, 16, 
    32, 112, 51, 224, 12, 63, 0, 16, 32, 112, 254, 224, 7, 231, 0, 16, 32, 255, 240, 224, 6, 7, 0, 16, 32, 248, 48, 0, 6, 119, 0, 16, 
    32, 0, 48, 0, 6, 119, 0, 16, 32, 0, 48, 0, 6, 119, 0, 16, 32, 96, 48, 224, 6, 103, 0, 16, 32, 48, 48, 112, 14, 103, 0, 16, 
    16, 48, 48, 112, 6, 103, 0, 32, 16, 48, 55, 240, 0, 248, 0, 32, 16, 99, 252, 112, 1, 206, 0, 32, 16, 255, 128, 112, 1, 143, 128, 32, 
    8, 248, 0, 112, 7, 7, 192, 64, 8, 96, 0, 96, 14, 3, 192, 64, 4, 0, 0, 0, 56, 1, 192, 128, 2, 0, 0, 0, 0, 0, 1, 0, 
    1, 192, 0, 0, 15, 255, 254, 0, 0, 192, 0, 0, 15, 255, 252, 0, 0, 112, 0, 0, 31, 255, 248, 0, 0, 124, 0, 0, 255, 255, 248, 0, 
    0, 60, 0, 0, 255, 255, 240, 0, 0, 30, 0, 1, 255, 255, 224, 0, 0, 15, 128, 3, 255, 255, 192, 0, 0, 3, 248, 31, 255, 255, 0, 0, 
    0, 1, 248, 31, 255, 254, 0, 0, 0, 0, 124, 63, 255, 248, 0, 0, 0, 0, 63, 255, 255, 240, 0, 0, 0, 0, 15, 255, 255, 192, 0, 0, 
    0, 0, 3, 255, 255, 0, 0, 0, 0, 0, 0, 63, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 160, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 
      

  6.   


    哦.我是想输出到memo里或者到txt里.
    如txt里内容如下
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 240, 0, 0, 0, 0, 0, 3, 255, 255, 0, 0, 0, 
    0, 0, 15, 255, 255, 192, 0, 0, 0, 0, 63, 255, 255, 240, 0, 0, 0, 0, 127, 255, 240, 248, 0, 0, 0, 1, 255, 255, 224, 126, 0, 0, 
    0, 3, 255, 255, 224, 127, 0, 0, 0, 15, 255, 255, 0, 7, 192, 0, 0, 31, 255, 254, 0, 1, 224, 0, 0, 63, 255, 252, 0, 0, 240, 0, 
    0, 127, 255, 252, 0, 0, 248, 0, 0, 127, 255, 224, 0, 0, 56, 0, 0, 255, 255, 192, 0, 0, 12, 0, 1, 255, 255, 192, 0, 0, 14, 0, 
    1, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 1, 0, 4, 0, 96, 0, 0, 56, 0, 128, 4, 0, 120, 0, 7, 57, 192, 128, 
    8, 0, 56, 0, 15, 57, 224, 64, 8, 0, 48, 0, 14, 59, 128, 64, 16, 0, 48, 0, 28, 63, 12, 32, 16, 0, 48, 0, 60, 60, 12, 32, 
    16, 0, 48, 224, 124, 120, 12, 32, 16, 96, 48, 112, 205, 216, 60, 32, 32, 112, 48, 115, 140, 15, 248, 16, 32, 112, 48, 112, 12, 0, 0, 16, 
    32, 112, 51, 224, 12, 63, 0, 16, 32, 112, 254, 224, 7, 231, 0, 16, 32, 255, 240, 224, 6, 7, 0, 16, 32, 248, 48, 0, 6, 119, 0, 16, 
    32, 0, 48, 0, 6, 119, 0, 16, 32, 0, 48, 0, 6, 119, 0, 16, 32, 96, 48, 224, 6, 103, 0, 16, 32, 48, 48, 112, 14, 103, 0, 16, 
    16, 48, 48, 112, 6, 103, 0, 32, 16, 48, 55, 240, 0, 248, 0, 32, 16, 99, 252, 112, 1, 206, 0, 32, 16, 255, 128, 112, 1, 143, 128, 32, 
    8, 248, 0, 112, 7, 7, 192, 64, 8, 96, 0, 96, 14, 3, 192, 64, 4, 0, 0, 0, 56, 1, 192, 128, 2, 0, 0, 0, 0, 0, 1, 0, 
    1, 192, 0, 0, 15, 255, 254, 0, 0, 192, 0, 0, 15, 255, 252, 0, 0, 112, 0, 0, 31, 255, 248, 0, 0, 124, 0, 0, 255, 255, 248, 0, 
    0, 60, 0, 0, 255, 255, 240, 0, 0, 30, 0, 1, 255, 255, 224, 0, 0, 15, 128, 3, 255, 255, 192, 0, 0, 3, 248, 31, 255, 255, 0, 0, 
    0, 1, 248, 31, 255, 254, 0, 0, 0, 0, 124, 63, 255, 248, 0, 0, 0, 0, 63, 255, 255, 240, 0, 0, 0, 0, 15, 255, 255, 192, 0, 0, 
    0, 0, 3, 255, 255, 0, 0, 0, 0, 0, 0, 63, 240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 170, 170, 170, 170, 170, 170, 160, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 
      

  7.   

    var
      s: string;for j:=0 to length(pic[0])-1 do
    begin
      s:='';
      for i:=0 to length(pic)-1 d0
      begin
        s:=s+','+inttostr(pic[i,j]);
      end;
      memo1.line.add(s);
    end;
      

  8.   

    如果是单色的BMP,那么上面的代码不一样吗??
      

  9.   

    bmp格式不同读取文件的方式就不同,如果你从image中读取图像的话只需读取image1.Canvas.Pixels的值就可以了