如题

解决方案 »

  1.   


    uses GDIPOBJ, GDIPAPI;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      g: TGpGraphics;
      attr: TGPImageAttributes;
      Image: TGpImage;
    begin
      g := TGpGraphics.Create(Handle, False);
      Image := TGpBitmap.Create('e:\1.jpg');
      attr := TGPImageAttributes.Create;
      attr.SetOutputChannel(ColorChannelFlagsK);
      g.DrawImage(Image, MakeRect(0, 0, Image.GetWidth, Image.GetHeight),
                  0, 0, Image.GetWidth, Image.GetHeight, UnitPixel, attr);
      attr.Free;
      g.Free;
      Image.Free;
    end;
      

  2.   

    maozefa(阿发伯) 是GDI高手,相信他没错的!
      

  3.   

    相信泽法大哥绝对没有错!顶^
    ============================================================================
    sanmaotuo(老冯) ,这次你说错了,我这不是真正的灰度图,而是输出了一个黑色通道,近似于灰度图,真正灰度图要一个个点处理
      

  4.   

    maozefa(阿发伯)能否加我QQ66516186
      

  5.   

    to 老冯老弟:
        昨天,下面的帖一直没人回,我也很忙,好不容易回了,而且分都得了,却有人事后评论,你来后请你看看,有比我代码更精简省事的吗?http://community.csdn.net/Expert/topic/5198/5198160.xml?temp=.4719202
      

  6.   

    maozefa(阿发伯) 
    不知你的所谓二值图是否就黑白二色,如果是,那更简单
    /////////////////////////////////////////////////
    就是黑白两色的,不知你是怎么个简单的方法,愿闻其详。
      

  7.   

    楼主好像考我的口气,下面的程序能实现黑白2色,不过黑与白的程度,也就是颜色的阀值因图片而异,得靠楼主自己了,既然楼主是研究这方面的,不用我多说吧!uses GDIPAPI, GDIPOBJ;{$R *.dfm}const
      maps: array[0..5] of ARGB = ($FFFF0000, $FF00FF00, $FF0000FF, $FFFFFF00, $FFFF00FF, $FF00FFFF);
      Threshold = 0.5;  //  阀值,这是黑白区分的关键procedure TForm1.Button1Click(Sender: TObject);
    var
      tmp, Image: TGpBitmap;
      attr: TGpImageAttributes;
      g: TGpGraphics;
      map: array[0..5] of TColorMap;
      i, w, h: Integer;
    begin
      tmp := TGpBitmap.Create(Image1.Picture.Bitmap.Handle, Image1.Picture.Bitmap.Palette);
      w := tmp.GetWidth;
      h := tmp.GetHeight;
      Image := TGpBitmap.Create(w, h);
      attr := TGpImageAttributes.Create;
      attr.SetThreshold(Threshold);
      g := TGpGraphics.Create(Image);
      g.DrawImage(tmp, MakeRect(0, 0, w, h), 0, 0, w, h, UnitPixel, attr);
      tmp.Free;  for i := 0 to 5 do
      begin
        map[i].oldColor := maps[i];
        map[i].newColor := aclWhite;
      end;
      attr.Reset;
      attr.SetRemapTable(6, @map);
      g.Free;  g := TGpGraphics.Create(Handle, False);
      g.DrawImage(image, MakeRect(0, 0, w, h), 0, 0, w, h, UnitPixel, attr);
      g.Free;
      attr.Free;
    end;
      

  8.   

    最后加上Imgae.Free;否则内存泄露^_^
      

  9.   

    maozefa(阿发伯) 
    不是我考你,谁让你在那卖关子,说了简单却又不公布答案。
    按你的方法问题已经解决。不知能否留下你的QQ,以后还要向你请教啊。
      

  10.   

    呵呵
    由此看来你对GDI+是轻车熟路啊,能否给些相关的资料或是Demo啊?
      

  11.   

    我的资料就是.net类库参考,其实回答这类问题我很累,因为我的GDI+是自己写的,接近于.NET,回到这里,还必须重写一遍