Delphi图像处理
CSDN论坛中,经常看到有关截屏的贴。所谓截屏,指的是获取屏幕,或者屏幕上某个窗口上的信息,并将其转换为图像的操作。为此,也写了几个Windows下的“截屏”函数:
过程定义:
// 获取Canvas有效区域内的图像数据。必须用FreeImageData释放数据结构
// 应调用ImageEmpty检查返回数据结构是否空
function GetImageData(Canvas: TCanvas): TImageData; overload;
// 获取窗口有效区域内的图像数据。必须用FreeImageData释放数据结构
// 应调用ImageEmpty检查返回数据结构是否空
function GetImageData(Handle: HWnd): TImageData; overload;
// 获取TGpGraphics对象有效区域内的图像数据。必须用FreeImageData释放数据结构
// 应调用ImageEmpty检查返回数据结构是否空
function GetImageData(g: TGpGraphics): TImageData; overload;
实现代码:
procedure FillAlpha(Data: TImageData);
asm
mov edx, [eax].TImageData.Scan0
mov ecx, [eax].TImageData.Width
imul ecx, [eax].TImageData.Height
mov eax, 0ff000000h
@PixelLoop:
or [edx], eax
add edx, 4
loop @PixelLoop
end;
function GetHBitmapData(DC: HDC; Bitmap: HBitmap; PixelBits: Integer): TImageData;
var
bmi: TBitmapInfo;
begin
Result := GetImageData(1, 1, 0, nil, 0);
bmi.bmiHeader := GetBitmapInfoHeader(Result);
if GetDIBits(DC, Bitmap, 0, 1, nil, bmi, DIB_RGB_COLORS) = 0 then
raise EImageDataError.Create(EIDErrorParam);
Result := GetImageData(bmi.bmiHeader.biWidth, bmi.bmiHeader.biHeight, PixelBits);
Result.InvertLine := True;
bmi.bmiHeader := GetBitmapInfoHeader(Result);
if GetDIBits(DC, Bitmap, 0, Result.Height, Result.Scan0, bmi, DIB_RGB_COLORS) = 0 then
begin
FreeImageData(Result);
raise EImageDataError.Create(EIDErrorNotSupport);
end;
end;
function GetImageDatafromDC(DC: HDC): TImageData;
var
r: TRect;
saveBitmap, Bitmap: HBITMAP;
memDC: HDC;
begin
FillChar(Result, Sizeof(TImageData), 0);
GetClipBox(DC, r);
if IsRectEmpty(r) then Exit;
Dec(r.Right, r.Left);
Dec(r.Botto
相关文档:
前言
尽三年来,本人陆续写了六十多篇BOLO文章,其中绝大部分是有关图像处理的,因此,有人戏称我为图像处理专家(或GDI+专家),此戏称当然是对我的赞扬,但我自己却觉得略含一丝丝贬义,即除了图像处理,别的方面(如网络、数据库等)都不咋的,事实也确实如此。
我是一名机关工 ......
新建一个Active Library
2. 新建一个COM Object,在Class Name填一个名字,如Test。
点一下Implemented Interface后面的List按钮。再点一下对话框中的Add Library按钮,
选择“Program Files\Common Files\Designer”目录下的msaddndr.dll文件。
然后在列表中找到msaddndr.dll里面的_IDTExtensibility2接口点 ......
delphi中Webbrowser问题收集
获得网页中变量值 htm中<script> var currID=123</script> 程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.currID 值得说明的是,变量可以是javascript定义的,也可以是vbs ......
ListView1.Items 为标准 Tlistitems类
ListView1.Items
(1)赋值
with ListView1.Items.Add do
begin
Caption:=caption; //添加第一项
SubItems.add(aaaaa); //添加后面数据
SubItems.add(1234);
SubItems.add(1234);
end; //一定要使用WITH结构.
(2)取值
listview1.Items.Item[i].Caption 取得某条数据标题
l ......
delphi全局变量的定义与赋值主要有下面几种方法:
1.
全局变量的初始化
在最后结束的end.之前,增加initialization关键字,然后加入对全局变量的初始化,这样就可以初始化全局变量了.不论在interface还是在implementation部分的全部变量,都可以这么来初始化
//省略前面的interface, uses, type.
var
i: Integer;
......