现在的位置: 首页 > 综合 > 正文

关于图像操作的几个函数

2013年10月14日 ⁄ 综合 ⁄ 共 1202字 ⁄ 字号 评论关闭

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;

抱歉!评论已关闭.