Delphi图像处理
《Delphi图像处理 -- 数据类型及内部过程》一文中定义了基本的图像数据类型及一些内部过程,本文进一步将Delphi常用的图像类型转换为图像处理所需的数据结构,为具体的Delphi图像处理过程作准备,同时也要将处理好的图像数据转换为Delphi的常用图像类型。《Delphi图像处理》系列除图像数据转换过程外,其它图像处理过程都统一使用32位ARGB像素格式。
一、获取TGraphic的图像数据。
TGraphic是Delphi的图像类基类,特别是其派生类TBitmap,更是Delphi最重要,也是最基础的图像类,它封装了Windows位图的常用操作,其它TGraphic派生类(包括一些第三方派生类)都可以转换为TBitmap,因此,获取了TBitmap的图像数据,也就获取了TGraphic派生类的图像数据。
有多个方法获取TBitmap的图像数据,一是直接在TBitmap的扫描线上操作,其好处是图像处理后直接反映在TBitmap中,不必再进行转换,缺点是由于本图像处理系列采用了统一的32位ARGB像素格式,所以必须设置TBitmap.PixelFormat属性,如此一来,势必破坏了原图像像素格式,而且除原32位图像外,实际上也进行了一次图像数据拷贝;二是不破坏TBitmap的像素格式,直接在TBitmap.ScanLine中解析拷贝图像数据,这是间接的TBitmap图像数据处理,处理完毕,有可能要转换为新的TBitmap;三是,用TBitmap.Handle属性借助Windows API进行数据转换,这种方式与第二种方式差不多,《Delphi图像处理 -- 真彩色图像转换为低色彩图像》一文中就是采用的这种方式。本文采用前2种方式获取TBitmap图像数据,具体采用何种方式由具体情况而定。下面是实现代码:
过程定义:
// 获取Graphic的图像数据。必须用FreeImageData释放数据结构
function GetImageData(Graphic: TGraphic): TImageData; overload;
// 获取Bitmap的图像数据。如果IsCopyData=True,复制Bitmap数据,
// 用FreeImageData释放数据结构,否则,Bitmap转换为32位后直接操作扫描线
function GetImageData(Bitmap: TBitmap; IsCopyData: Boolean): TImageData; overload;
// 拷贝Source到32位Dest。如果是8位或者4位Source,必须要有相应的颜色表Colors
procedure CopyImageDatafrom(var Dest: TImageData;
const Source: TImageData; Colors: PRGBQuad = nil);
// 拷贝32位Source到32 or 24位Dest。
实现代码:
// 填充Alpha通道
procedu
相关文档:
{ 函数 : RESULTSTRING = HexToBin(HEXSTRING)
{ 目的 : 把十六进制字符串转换为二进制字符串
{
{===============================================================}
{ 函数 : RESULTINTEGER = HexCharToInt(HEXCHAR)
{ 目的 : 转换一个十六进制字符为整数
{==================================================== ......
服务端:添加ADOConnection,ADOQuery1,ADOQuery2。设置ADOQuery1为主表,ADOQuery2为从表。(通过 ADOQuery2.SQL.Text:= 'select * from 从表 where FKID=:主表PKID'设置)。添加DataSetProvider1和DataSetProvider2分别连接到ADOQuery1和ADOQuery2。
客户端:添加ClientDataSet1,ClientDataSet2。ClientDataS ......
Unt_Machine_WebDll.pas
BODY {background: #FFFFFF}
A:link { color: #0000FF}
A:visited { color: #0000FF}
A:Active { color: #0000FF}
.bold {font-weight: bold}
.italic {font-style: italic}
.underline {text-decoration: underline}
unit Unt_Machine_WebDll;
{$WARN SYMBOL_PLATFORM OF ......
制作圆角矩形的窗体:
01.procedure TPortForm.FormCreate(Sender: Tobject);
02.var hr :thandle;
03.begin
04.hr:=createroundrectrgn(0,0,width,height,20,20);
05.setwindowrgn(handle,hr,true);
06.end;
如果不要窗体外框,则使用:
01.procedure TPortForm.FormCreate(Sender: Tobject);
02.var hr :thandl ......
Uses Tlhelp32;
//用Listbox显示方法
procedure TForm1.Button1Click(Sender: TObject);
var
lppe:TProcessEntry32;
found:boolean;
Hand:THandle;
begin
Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
lppe.dwSize := Sizeof(lppe); //初始化
found:=Process32First(Hand,lppe);
......