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
相关文档:
procedure TForm1.Button1Click(Sender: TObject);
Var
Num: Integer;
Begin
Try
Num:=StrToInt(Edit1.Text);
Edit2.Text:=IntToStr(Num*Num);
Except
On EConvertError Do ShowMessage(Edit1.Text+'无法转成整数!');
......
图像缩放是最常用的图像处理,在图像拉伸和取得图像略图中都要用到。图像缩放质量的好坏与图像像素插值方式有关,本文定义了常用的3种插值方式,即临近插值、线性插值和双立方插值方式:
type
// 插值方式: 缺省(线性插值),临近,线性,双立方
TInterpolateMode = (imDefault, imNear, imBiline ......
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw;
t ......
delphi中Webbrowser问题收集
获得网页中变量值 htm中<script> var currID=123</script> 程序中可以这么调用 id := Form1.WebBrowser1.OleObject.Document.script.currID 值得说明的是,变量可以是javascript定义的,也可以是vbs ......
WebBrowser组件和MSHTML 在Delphi中的使用
由于项目需要,近来研究了一下WebBrowser组件和MSHTML 在Delphi中的使用,整理了一下这段时间研究的结果,写下来一是方便大家查阅,二也可以加深我自己的记忆.希望能对大家有所帮助… …,同时,如果有更好的处理方式或者我没有提到的问题,请大家也告诉我哦, 咱们一 ......