码迷,mamicode.com
首页 > 其他好文 > 详细

GDI+ 学习记录(26): 显示图像 - Image

时间:2015-12-15 18:10:31      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

 

//显示图像
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 指定最临近插值法。

GDI+ 学习记录(26): 显示图像 - Image

标签:

原文地址:http://www.cnblogs.com/zhangzhifeng/p/5048868.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!