GDI+ 学习记录(26): 显示图像 - Image
//显示图像
var
g: TGPGraphics;
img: TGPImage;
begin
g := TGPGraphics.Create(Self.Canvas.Handle); img := TGPImage.Create('c:\temp\x.jpg'); g.DrawImage(img,,); {参数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, , , 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, , , , ); 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(, , nil, nil);
g.DrawImage(imgSmall, , , imgSmall.GetWidth, imgSmall.GetHeight); img.Free;
imgSmall.Free;
g.Free;
end;
//图片平行四边形变换
var
g: TGPGraphics;
img: TGPImage;
const
pts: array[..] of TGPPoint = ((x:; y:),
(x:; y:),
(x:; y:));
begin
g := TGPGraphics.Create(Canvas.Handle);
img:= TGPImage.Create('c:\temp\x.jpg'); g.DrawImage(img, , ); {这是原始图片} g.DrawImage(img, PGPPoint(@pts), );
{反复测试后, 感悟如下:
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(, , w, h), , , w, h, UnitPixel); g.SetInterpolationMode(InterpolationModeNearestNeighbor);
g.DrawImage(img, MakeRect(, , 0.6*w, 0.6*h), , , w, h, UnitPixel); g.SetInterpolationMode(InterpolationModeHighQualityBilinear);
g.DrawImage(img, MakeRect(, , 0.6*w, 0.6*h), , , w, h, UnitPixel); g.SetInterpolationMode(InterpolationModeHighQualityBicubic);
g.DrawImage(img, MakeRect(, , 0.6*w, 0.6*h), , , 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的更多相关文章
- libgdx学习记录26——Polygon多边形碰撞检测
libgdx中Math封装了Polygon这个类,它是由多个定点进行描述实现的,在进行物体间的碰撞时,物体轮廓有时候是不规则的,这时候可以用一个多边形勾勒出其大概的轮廓,对其进行模拟. Polygon ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- UWP学习记录8-设计和UI之控件和模式5
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...
- Echarts学习记录——如何去掉网格线及网格区域颜色
关键属性 splitLine和splitArea,可以设置相关的属性 示例代码 <!DOCTYPE html> <html lang="en"> <h ...
- Echarts学习记录——如何给x轴文字标签添加事件
Echarts学习记录——如何给x轴文字标签添加事件 关键属性 axisLabel下属性clickable:true 并给图表添加单击事件 根据返回值判断点击的是哪里 感觉自己的方法有点变扭,有更好办 ...
- MyBatis 学习记录5 MyBatis的二级缓存
主题 之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类. 现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情 首先二级缓存默认是不开启的,需要自 ...
- JavaScript学习记录一
title: JavaScript学习记录一 toc: true date: 2018-09-11 18:26:52 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...
- git原理学习记录:从基本指令到背后原理,实现一个简单的git
一开始我还担心 git 的原理会不会很难懂,但在阅读了官方文档后我发现其实并不难懂,似乎可以动手实现一个简单的 git,于是就有了下面这篇学习记录. 本文的叙述思路参照了官方文档Book的原理介绍部分 ...
- Java 8 学习记录
Java 8 学习记录 官方文档 https://docs.oracle.com/javase/8/ https://docs.oracle.com/javase/8/docs/index.html ...
随机推荐
- DNF技能贴图的研究
一直在猜想DNF的技能贴图怎么贴的,靠在游戏里慢慢移动确定技能的偏移太费时间了.前段发现了“可视坐标生成”这软件,针对DNF改衣服,装备款式的小工具,就自己写了个类似的. 从图上看,技能的域中心点和人 ...
- C# - dynamic 类型
C#4引入dynamic关键字,定义变量时,可以不初始化它的值. dynamic类型仅在编译期间存在,在运行期间会被System.Object类型替代. dynamic myDynamicVar; m ...
- Svg 画图(电池)
公司现在在做充电桩项目,其中要显示充电桩的电池充电情况,功能展示的时候要画图,之前做的时候准备使用HightChar来画,但是,hightchar好像没有这样的电池图形,最后,项目经理要我自己通过sv ...
- VPN销售管理系统一键安装包
wget http://d.zmrbk.com/vpn/zmrvpn.sh;chmod +x zmrvph.sh;sh zmrvpn.sh 2>&1 | tee zmrbk.com.lo ...
- CROSS APPLY vs OUTER APPLY
Apply 工作原理: Apply操作符让符合查询的每一条记录都调用一次TVF函数,并将结果与原数据表的记录内容一起展开. Apply操作符定义在From子句内,使用方式与Join操作符类 ...
- 2733: [HNOI2012]永无乡 - BZOJ
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- mac忘记密码的解决办法
开机, 启动时按"cmd+S".这时,你会进入Single User Model,出现像DOS一样的提示符 #root>.请在#root>下 输入 (注意空格, 大小写 ...
- php构造函数construct用法注意事项
<?php class A { //特别注意,这里的下划线为两个 function __construct() { echo "I am the constructor of A.&l ...
- Java中的try、catch、finally块简单的解析
package com.wangzhu; import java.util.HashMap; import java.util.Map; /** * 在try.catch.finally块中,若try ...
- [itint5]合并K个有序链表
merge sort,leet code里面曾经做过.但一开始没这么写,遍历来做,效率n*k了,用了merge sort后,变成logn*k. 用了dummy node.同时要注意size为0的情况. ...