本文主要是介绍刚刚写的一个将图像的某个区域之外的区域变暗的函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
DelphiCode: {------------------------------------------------------------------------------- 过程名: DarkBmp 作者: 不得闲 日期: 2009.02.04 参数: bmp: TBitmap;var DarkRect: TRect;const DarkValue: Integer;const HighValue: Integer = 0 DarkRect指定不变暗的区域 DarkValue: 指定暗化的数量值 HighValue: 指定矩形区域增亮化的数量值 功能: 将图像的某个区域之外的区域变暗的函数 返回值: 无 -------------------------------------------------------------------------------} procedure DarkBmp(bmp: TBitmap;var DarkRect: TRect;const DarkValue: Integer;const HighValue: Integer = 0); var i,j : integer; pB : PByteArray; BmpFormatXs: Integer; w,h:Integer; begin i := Integer(bmp.PixelFormat); if i < 4 then i := 4 else if i = 4 then inc(i) else if i > 7 then i := 7; BmpFormatXs := i - 3; w:= DarkRect.Right - DarkRect.Left; h:= DarkRect.Bottom - DarkRect.Top; if DarkRect.Right > bmp.Width then begin DarkRect.Left:=bmp.Width - w; DarkRect.Right:=bmp.Width; end; if (DarkRect.Bottom > bmp.Height) then begin DarkRect.Top:= bmp.Height - h; DarkRect.Bottom:=bmp.Height; end; if DarkRect.Left <0 then begin DarkRect.Left:=0; DarkRect.Right:=w; end; if DarkRect.Top <0 then begin DarkRect.Top:=0; DarkRect.Bottom:=h; end; for i := 0 to DarkRect.Top - 1 do begin pb:=bmp.ScanLine[i]; for j:=0 to BmpFormatXs*bmp.Width - 1 do if pb[j]then pb[j]:=0 else dec(pb[j],DarkValue); end; for i := DarkRect.Top to bmp.Height - 1 do begin pb:=bmp.ScanLine[i]; for j:=0 to BmpFormatXs*DarkRect.Left - 1 do if pb[j]then pb[j]:=0 else dec(pb[j],DarkValue); end; for i := DarkRect.Bottom to bmp.Height - 1 do begin pb:=bmp.ScanLine[i]; for j:= BmpFormatXs*DarkRect.Left to BmpFormatXs*bmp.Width - 1 do if pb[j]then pb[j]:=0 else dec(pb[j],DarkValue); end; for i := DarkRect.Top to DarkRect.Bottom - 1 do begin pb:=bmp.ScanLine[i]; for j:= BmpFormatXs*DarkRect.Right to BmpFormatXs*bmp.Width - 1 do if pb[j]then pb[j]:=0 else dec(pb[j],DarkValue) end; if HighValue <> 0 then for i := DarkRect.Top to DarkRect.Bottom - 1 do begin pb:=bmp.ScanLine[i]; for j:= BmpFormatXs*DarkRect.Left to BmpFormatXs*DarkRect.Right - 1 do if pb[j]>(255-DarkValue) then pb[j]:=255 else inc(pb[j],HighValue); end; end; 使用方法: procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; r: TRect; begin bmp := TBitmap.Create; bmp.Assign(Image1.Picture.Bitmap); r := Rect(0,0,50,50); DarkBmp(bmp,r,40,10); Image2.Picture.Bitmap := bmp; end; |
这篇关于刚刚写的一个将图像的某个区域之外的区域变暗的函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!