for J := 0 to Image1.Picture.Bitmap.Height - 1 do
  begin
    S := '';
    for I := 0 to Image1.Picture.Bitmap.Width - 1 do
      if Image1.Picture.Bitmap.Canvas.Pixels[I, J] = clBlack then
        S := S + Edit2.Text
      else
        S := S + Edit3.Text;
    Memo1.Lines.Add(S);
  end;

解决方案 »

  1.   

    但是图片是彩色的,那如何转换?比如将*.jpg,*.bmp文件转换成字符图!
    是否是先将此图转换成灰度图,那如何实现呢?请详解!
      

  2.   

    //==============================================================================
    //取得客户端‘主机名’‘IP地址’************************************************
    //==============================================================================
    procedure GetClientInfo(var ClientName, IPAddress: string);
    var WSAData: TWSAData;
        HostEnt: PHostEnt;
    begin
      {no error checking...}
      WSAStartup(2, WSAData);
      SetLength(ClientName, 255);
      Gethostname(PChar(ClientName), 255);
      SetLength(ClientName, StrLen(PChar(ClientName)));
      HostEnt := GetHostByName(PChar(ClientName));
      with HostEnt^ do IPAddress := Format('%d.%d.%d.%d',[Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
      WSACleanup;
    end;
      

  3.   

    quark(夸克) 你说什么呢?不是我想要的代码!
      

  4.   

    我以前无聊是时候做过一个这东西.用SCANLINE.速度还可以,1.0秒以内可以完成图片的两次扫描.和TXT的生成.第依次把彩色的BMP按你给定的阀值做一次二值化,就是把BMP变成黑白两色的.然后再这个二值图象的基础上再做一次SCANLINE.这次扫描时,如果颜色是白的.(RGB现在都是0),就在MEMO中ADD一个SPACE空格,如果是黑的,MEMO中就ADD一个你给定的字符,扫完一行后,MEMO中ADD一个#13(回车),就OK了,具体代码很简单的,就是用这个SCANLINE[I],速度是可以满足一般应用的.还有一些小的细节,做的时候想想就知道了.比如说你不能一个PIXEL一个PIXEL的选取,要根据你的MEMO中的字体的大小(重点是宽度,高度也要的)来决定,这样做出来的TXT才像,.