您的位置:首页 > 其它

关于图像操作的几个函数

2009-02-04 13:54 471 查看
DelphiCode:

//////////////////////////////////////////
//不得闲图像操作函数库
/////////////////////////////////////////

{将位图颜色变深}
procedure Dark24Bitmap(var B : TBitmap;N : integer);
var
i,j : integer;
pB : PByteArray;
Count: Integer;
begin
i := Integer(B.PixelFormat);
if i < 4 then
i := 4
else if i = 4 then
inc(i);
Count := (i - 3) * B.Width - 1;
for i:=0 to B.Height-1 do
begin
pb:=B.ScanLine[i];
for j:=0 to  Count do
if pb[j]then pb[j]:=0 else dec(pb[j],n);
end;
end;

{将位图颜色变浅}
procedure Light24Bitmap(var B : TBitmap;N : integer);
var
i,j : integer;
pB : PByteArray;
Count: Integer;
begin
i := Integer(B.PixelFormat);
if i < 4 then
i := 4
else if i = 4 then
inc(i);
Count := (i - 3) * B.Width - 1;
for i:=0 to B.Height-1 do
begin
pb:=B.ScanLine[i];
for j:=0 to  Count do
begin
if pb[j]>(255-n) then pb[j]:=255 else inc(pb[j],n);
end;
end;
end;

{比较两个位图是否相同}
function IsBmpSame(bmp1,bmp2: TBitmap): Boolean;
var
i,j: Integer;
ScanLine1,ScanLine2: PByteArray;
Count: Integer;
begin
Result := (bmp1.Height = bmp2.Height) and
(bmp1.Width = bmp2.Width) and
(bmp1.PixelFormat = bmp2.PixelFormat);
if Result then
begin
i := Integer(bmp1.PixelFormat);
if i < 4 then
i := 4
else if i = 4 then
inc(i);
Count := (i - 3) * bmp1.Width - 1;

for i:=0 to bmp1.Height-1 do
begin
ScanLine1 := bmp1.ScanLine[i];
ScanLine2 := bmp2.ScanLine[i];
for j := 0 to Count do
if ScanLine1[j] <> ScanLine2[j] then
begin
Result := False;
Exit;
end;
end;
end;
end;


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: