随笔 - 2146  文章 - 19 评论 - 11846 阅读 - 1267万

//显示图像
var
  g: TGPGraphics;
  img: TGPImage;
begin
  g := TGPGraphics.Create(Self.Canvas.Handle);

  img := TGPImage.Create('c:\temp\x.jpg');

  g.DrawImage(img,10,10); {参数2、3是坐标}

  img.Free;
  g.Free;
end;

//按标准的高度与宽度显示图像 var   g: TGPGraphics;   img: TGPImage; begin   g := TGPGraphics.Create(Canvas.Handle);   img := TGPImage.Create('c:\temp\x.jpg');   g.DrawImage(img, 10, 10, img.GetWidth, img.GetHeight);   img.Free;   g.Free; end;
//按指定高度与宽度显示图像 var   g: TGPGraphics;   img: TGPImage; begin   g := TGPGraphics.Create(Canvas.Handle);   img := TGPImage.Create('c:\temp\x.jpg');   g.DrawImage(img, 10, 10, 100, 200);   img.Free;   g.Free; end;
//略缩图 var   g : TGPGraphics;   img, imgSmall: TGPImage; begin   g := TGPGraphics.Create(Canvas.Handle);   img:= TGPImage.Create('c:\temp\x.jpg');   imgSmall := img.GetThumbnailImage(48, 60, nil, nil);   g.DrawImage(imgSmall, 10, 10, imgSmall.GetWidth, imgSmall.GetHeight);   img.Free;   imgSmall.Free;   g.Free; end;
//图片平行四边形变换 var   g: TGPGraphics;   img: TGPImage; const   pts: array[0..2] of TGPPoint = ((x:300; y:120),                                   (x:210; y:200),                                   (x:350; y:230)); begin   g := TGPGraphics.Create(Canvas.Handle);   img:= TGPImage.Create('c:\temp\x.jpg');   g.DrawImage(img, 0, 0); {这是原始图片}   g.DrawImage(img, PGPPoint(@pts), 3);   {反复测试后, 感悟如下:     1、只需要 3 个点来控制图片, 不能多或少.     2、点 1 控制右上角; 点 2 控制左上角; 点 3 控制右下角.     3、因为是平行四边形, 所以剩下的左下角的点(就是右上角的对角点)程序就可以算得出来了.   }   img.Free;   g.Free; end;
//图像缩放时的算法比对 var   g: TGPGraphics;   img: TGPImage;   w, h: UINT; begin   g := TGPGraphics.Create(Canvas.Handle);   img:= TGPImage.Create('c:\temp\x.jpg');   w  := img.GetWidth;   h := img.GetHeight;   g.DrawImage(img, MakeRect(10, 10, w, h), 0, 0, w, h, UnitPixel);   g.SetInterpolationMode(InterpolationModeNearestNeighbor);   g.DrawImage(img, MakeRect(10, 250, 0.6*w, 0.6*h), 0, 0, w, h, UnitPixel);   g.SetInterpolationMode(InterpolationModeHighQualityBilinear);   g.DrawImage(img, MakeRect(150, 250, 0.6*w, 0.6*h), 0, 0, w, h, UnitPixel);   g.SetInterpolationMode(InterpolationModeHighQualityBicubic);   g.DrawImage(img, MakeRect(290, 250, 0.6*w, 0.6*h), 0, 0, w, h, UnitPixel);   img.Free;   g.Free; end;
缩放或旋转图像时的算法选项:

Delphi 微软 说明
InterpolationModeBicubic Bicubic 指定双三次插值法。不进行预筛选。将图像收缩为原始大小的 25% 以下时,此模式不适用。
InterpolationModeBilinear Bilinear 指定双线性插值法。不进行预筛选。将图像收缩为原始大小的 50% 以下时,此模式不适用。
InterpolationModeDefault Default 指定默认模式。
InterpolationModeHigh High 指定高质量插值法。
InterpolationModeHighQualityBicubic HighQualityBicubic 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。
InterpolationModeHighQualityBilinear  HighQualityBilinear  指定高质量的双线性插值法。执行预筛选以确保高质量的收缩。
InterpolationModeInvalid Invalid 等效于 QualityMode 枚举的 Invalid 元素。
InterpolationModeLow Low 指定低质量插值法。
InterpolationModeNearestNeighbor NearestNeighbor 指定最临近插值法。


posted on   万一  阅读(7035)  评论(7编辑  收藏  举报


点击右上角即可分享
微信分享提示