100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 原创 ···DELPHI 图片图形图像处理 PS置换滤镜效果 亮度/对比度 纹理贴图效果

原创 ···DELPHI 图片图形图像处理 PS置换滤镜效果 亮度/对比度 纹理贴图效果

时间:2021-01-17 18:06:28

相关推荐

原创 ···DELPHI 图片图形图像处理 PS置换滤镜效果 亮度/对比度 纹理贴图效果

DELPHI 图片图形图像处理 PS置换滤镜效果,亮度/对比度,纹理贴图

以前没弄过DELPHI,最近学了1个多星期时间,无聊时候吧以前用C#写的部分图像处理代码转换成DELPHI,竟然发现D处理图片的速度比C#快了20倍··················D处理图片0.3s,C#处理同一图片6s多 ,差距真大·····················我写的算法调用GDI函数,无汇编便于理解,觉的好的顶一个,顶的多就发布下一篇图像处理,转帖的话请写明转帖和原作者 胡睿 QQ 235483710 EMAIL: jennievictor@

欢迎大家交流技术。D没学多久,有些地方没写好的别见怪,有优化的大家优化吧,把成果共享下。

/software.html 下载

/ps.html可以购买该软件完整源码

//============================================================================== //图像处理程序,纹理与背景融合算法未优化版 //作者:胡睿QQ:235483710,Email:jennievictor@ //创建日期:/9/2 //承接手机程序开发,windows程序开发,图形图像处理开发,数据库开发等外包业务 //主打.net,SqlServer2K,Oracle,J2me,WM //============================================================================== unitMain;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,StdCtrls,Buttons,ComCtrls,jpeg,StrUtils,FmtBcd;typeTForm1=class(TForm)BitBtn1:TBitBtn;BitBtn2:TBitBtn;OpenDialog1:TOpenDialog;OpenDialog2:TOpenDialog;GroupBox1:TGroupBox;Image1:TImage;GroupBox2:TGroupBox;Image2:TImage;BitBtn3:TBitBtn;TrackBar1:TTrackBar;Button2:TButton;Label7:TLabel;Label8:TLabel;Label1:TLabel;TrackBar2:TTrackBar;TrackBar3:TTrackBar;Label2:TLabel;Button1:TButton;Label3:TLabel;TrackBar4:TTrackBar;Label4:TLabel;TrackBar5:TTrackBar;TrackBar6:TTrackBar;Label5:TLabel;Label6:TLabel;Button3:TButton;Label9:TLabel;procedureFormCreate(Sender:TObject);procedureBitBtn3Click(Sender:TObject);procedureBitBtn1Click(Sender:TObject);procedureBitBtn2Click(Sender:TObject);procedureTrackBar1Change(Sender:TObject);procedureTrackBar2Change(Sender:TObject);procedureTrackBar3Change(Sender:TObject);procedureButton2Click(Sender:TObject);//处理移动图像 //参数定义bmpBackGround1背景图片 //bmpTexture1纹理图片 //moveX纹理开始区域在背景图中X坐标 //moveY纹理开始区域在背景图中Y坐标 //返回Bitmap移动后的图片 functioncreateMoveImg(bmpBackGround1:TBitmap;moveX:Integer;moveY:Integer):TBitmap;//处理混合图像 //参数定义bmpBackGround1背景图片 //bmpTexture1纹理图片 //moveX纹理开始区域在背景图中X坐标 //moveY纹理开始区域在背景图中Y坐标 //返回Bitmap混合效果特效图片 functioncreateMixImg(bmpBackGround1:TBitmap;bmpTexture1:TBitmap;moveX:Integer;moveY:Integer):TBitmap;//处理图像置换 //参数定义bmpBackGround1背景图片 //bmpTexture1纹理图片 //moveX纹理开始区域在背景图中X坐标 //moveY纹理开始区域在背景图中Y坐标 //返回Bitmap混合置换特效图片 functionreplacementEffect(bmpBackGround1:TBitmap;bmpTexture1:TBitmap;moveX:Integer;moveY:Integer):TBitmap;//调节背景图亮度对比度 //参数定义brightness亮度 //contrast对比度 functionBrightnessAndContrast(brightness:Integer;contrast:Integer):TBitmap;procedureButton1Click(Sender:TObject);procedureTrackBar4Change(Sender:TObject);procedureTrackBar5Change(Sender:TObject);procedureTrackBar6Change(Sender:TObject);procedureButton3Click(Sender:TObject);private{Privatedeclarations}{procedureBlendBmp(Bmp:TBitmap;BlendValue:Byte);//透明度处理}public{Publicdeclarations}end;varForm1:TForm1;bmpBackGround:TBitmap;//背景位图 bmpTexture:TBitmap;//纹理位图 isLoadBackGround:Boolean;//是否已经加载背景图 isLoadTexture:Boolean;//是否已经加载纹理图 alphaValue:Integer;//alpha数值 implementation{$R*.dfm}//============================================================================== //图像处理程序,纹理与背景融合算法未优化版 //作者:胡睿QQ:235483710,Email:jennievictor@ //创建日期:/9/2 //承接手机程序开发,windows程序开发,图形图像处理开发,数据库开发等外包业务 //主打.net,SqlServer2K,Oracle,J2me,WM //============================================================================== //============================================================================== //窗体初始化 //============================================================================== procedureTForm1.FormCreate(Sender:TObject);begin//窗体初始化位置 OpenDialog1.Title:='请选择图片文件,Demo仅支持bmp';OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);OpenDialog2.Title:='请选择图片文件,Demo仅支持bmp';OpenDialog2.InitialDir:=ExtractFilePath(Application.ExeName);Form1.Top:=-20;Form1.Left:=11;//初始化位图 bmpBackGround:=TBitmap.Create;//背景位图 bmpTexture:=TBitmap.Create;//纹理位图 self.DoubleBuffered:=true;//打开双缓冲 end;//============================================================================== //混合溶解,产生特效图片 //============================================================================== procedureTForm1.BitBtn3Click(Sender:TObject);beginGroupBox1.Caption:='特效图片';ifisLoadTexture=TrueandisLoadBackGround=TruethenbeginImage1.Picture:=nil;//释放图片 Image1.Canvas.Draw(0,0,createMixImg(bmpBackGround,bmpTexture,TrackBar2.Position,TrackBar3.Position));Image1.Canvas.TextOut(60,60,'DEMO胡睿制作QQ:235483710');endelsebeginShowMessage('请先载入纹理图片及背景图片');end;end;//============================================================================== //打开背景文件,选择框加载图片 //============================================================================== procedureTForm1.BitBtn1Click(Sender:TObject);begin//打开文件选择框加载图片 OpenDialog1.Execute;//判断选择的背景图片是否格式正确 ifRightStr(OpenDialog1.FileName,4)='.bmp'thenbeginImage1.Picture.LoadFromFile(OpenDialog1.FileName);//将jpeg图转化为位图 //jpegImg:=TJPEGImage.Create; //jpegImg.LoadFromFile(OpenDialog1.FileName); //bmpBackGround.Assign(jpegImg); bmpBackGround.Assign(Image1.Picture);isLoadBackGround:=True;//设置trackbar2,trackbar3最大值 trackBar2.Max:=bmpBackGround.Width;TrackBar3.Max:=bmpBackGround.Height;end;end;//============================================================================== //打开纹理文件,选择框加载图片 //============================================================================== procedureTForm1.BitBtn2Click(Sender:TObject);begin//打开文件选择框加载图片 OpenDialog2.Execute;//判断选择的纹理图片是否格式正确 ifRightStr(OpenDialog2.FileName,4)='.bmp'thenbeginImage2.Picture.LoadFromFile(OpenDialog2.FileName);//将jpeg图转化为位图 //jpegImg:=TJPEGImage.Create; //jpegImg.LoadFromFile(OpenDialog2.FileName); //bmpTexture.Assign(jpegImg); bmpTexture.Assign(Image2.Picture.Graphic);isLoadTexture:=True;end;end;//============================================================================== //trackbar1显示透明度 //============================================================================== procedureTForm1.TrackBar1Change(Sender:TObject);beginalphaValue:=TrackBar1.Position;Label1.Caption:='Alpha:'+IntToStr(alphaValue);end;//============================================================================== //trackbar2显示移动到背景图X位置 //============================================================================== procedureTForm1.TrackBar2Change(Sender:TObject);varX:Integer;//X数值 bmpMove:TBitmap;rectMove:TRect;beginX:=trackbar2.Position;Label7.Caption:='X:'+IntToStr(X);bmpMove:=TBitmap.Create;bmpMove.Assign(bmpBackGround);//产生移动虚线框 rectMove:=Rect(X,trackbar3.Position,X+bmpTexture.Width,trackbar3.Position+bmpTexture.Height);bmpMove.Canvas.DrawFocusRect(rectMove);Image1.Canvas.Draw(0,0,bmpMove);Image1.Refresh;end;//============================================================================== //trackbar3显示移动到背景图Y位置 //============================================================================== procedureTForm1.TrackBar3Change(Sender:TObject);varY:Integer;//Y数值 bmpMove:TBitmap;rectMove:TRect;beginY:=trackbar3.Position;Label8.Caption:='Y:'+IntToStr(Y);bmpMove:=TBitmap.Create;bmpMove.Assign(bmpBackGround);//产生移动虚线框 rectMove:=Rect(trackbar2.Position,Y,trackbar2.Position+bmpTexture.Width,Y+bmpTexture.Height);bmpMove.Canvas.DrawFocusRect(rectMove);Image1.Canvas.Draw(0,0,bmpMove);Image1.Refresh;end;//============================================================================== //移动纹理图至背景图指定位置 //============================================================================== procedureTForm1.Button2Click(Sender:TObject);beginbmpBackGround:=BrightnessAndContrast(trackbar5.Position,trackbar6.Position);ifisLoadTexture=TrueandisLoadBackGround=TruethenbeginGroupBox1.Caption:='已移动到背景图片';Image1.Picture:=nil;//释放图片 Image1.Canvas.Draw(0,0,createMoveImg(bmpBackGround,TrackBar2.Position,TrackBar3.Position));endelsebeginShowMessage('请先载入纹理图片及背景图片');end;end;//============================================================================== //处理移动图像 //参数定义bmpBackGround1背景图片 //bmpTexture1纹理图片 //moveX纹理开始区域在背景图中X坐标 //moveY纹理开始区域在背景图中Y坐标 //返回Bitmap混合效果特效图片 //============================================================================== functionTForm1.createMoveImg(bmpBackGround1:TBitmap;moveX:Integer;moveY:Integer):TBitmap;vari:Integer;j:Integer;pixColorTexture:TColor;cr,cg,cb:dword;bmpResult:TBitmap;//结果图片 beginbmpResult:=TBitmap.Create;bmpResult.Assign(bmpBackGround1);fori:=0tobmpTexture.Width-1doforj:=0tobmpTexture.Height-1dobeginpixColorTexture:=bmpTexture.Canvas.Pixels[i,j];cr:=GetRValue(pixColorTexture);cg:=GetGValue(pixColorTexture);cb:=GetBValue(pixColorTexture);bmpResult.Canvas.Pixels[i+moveX,j+moveY]:=RGB(cr,cg,cb);end;Result:=bmpResult;end;//============================================================================== //处理混合图像 //参数定义bmpBackGround1背景图片 //bmpTexture1纹理图片 //moveX纹理开始区域在背景图中X坐标 //moveY纹理开始区域在背景图中Y坐标 //返回Bitmap混合效果特效图片 //============================================================================== functionTForm1.createMixImg(bmpBackGround1:TBitmap;bmpTexture1:TBitmap;moveX:Integer;moveY:Integer):TBitmap;varpixColorBG:TColor;//背景图像素RGB值 pixColorTexture:TColor;//纹理图像素RGB值 bmpResult:TBitmap;//结果图片 i:Integer;j:Integer;cr,cg,cb:dword;R,G,B:dword;beginbmpResult:=TBitmap.Create;bmpResult.Assign(bmpBackGround1);//处理纹理alpha透明(RGB_Texture*alpha+RGB_Background*(256-alpha))>>8 Fori:=0tobmpTexture.Width-1doForj:=0tobmpTexture.Height-1dobeginpixColorTexture:=bmpTexture1.Canvas.Pixels[i,j];pixColorBG:=bmpBackGround1.Canvas.Pixels[i+moveX,j+moveY];R:=(GetRValue(pixColorTexture)*alphaValue+GetRValue(pixColorBG)*(256-alphaValue))shr8;G:=(GetGValue(pixColorTexture)*alphaValue+GetGValue(pixColorBG)*(256-alphaValue))shr8;B:=(GetBValue(pixColorTexture)*alphaValue+GetBValue(pixColorBG)*(256-alphaValue))shr8;bmpResult.Canvas.Pixels[i+moveX,j+moveY]:=RGB(R,G,B);end;//混合算法公式RGB_Texture*RGB_Background/255 fori:=0tobmpTexture.Width-1doforj:=0tobmpTexture.Height-1dobeginpixColorTexture:=bmpTexture1.Canvas.Pixels[i,j];pixColorBG:=bmpBackGround1.Canvas.Pixels[i+moveX,j+moveY];cr:=(GetRValue(pixColorBG)*GetRValue(pixColorTexture))div255;cg:=(GetGValue(pixColorBG)*GetGValue(pixColorTexture))div255;cb:=(GetBValue(pixColorBG)*GetBValue(pixColorTexture))div255;bmpResult.Canvas.Pixels[i+moveX,j+moveY]:=RGB(cr,cg,cb);end;Result:=bmpResult;end;//============================================================================== //处理图像置换 //参数定义bmpBackGround1背景图片 //bmpTexture1纹理图片 //moveX纹理开始区域在背景图中X坐标 //moveY纹理开始区域在背景图中Y坐标 //返回Bitmap混合置换特效图片 //============================================================================== functionTForm1.replacementEffect(bmpBackGround1:TBitmap;bmpTexture1:TBitmap;moveX:Integer;moveY:Integer):TBitmap;varpixColorBG:arrayofarrayofTColor;//背景图像素RGB值 pixColorTexture:arrayofarrayofTColor;//纹理图像素RGB值 pixColorBGBak:arrayofarrayofTColor;//背景图备份像素RGB值 pixColorResult:arrayofarrayofTColor;//混合结果图 bmpBackgroundBak:TBitmap;//背景图备份 bmpNewTexture:TBitmap;//扭曲后新纹理图 i:Integer;j:Integer;bmpWidth:Integer;bmpHeight:Integer;replaceFactor:Integer;//置换因子值 cr,cg,cb:arrayofarrayofDWORD;//背景像素颜色分量 cgray:arrayofarrayofDWORD;//背景图的灰阶图颜色分量 R,G,B:arrayofarrayofDWORD;//纹理像素颜色分量 crResult,cgResult,cbResult:arrayofarrayofDWORD;//结果图片像素颜色分量 beginSetLength(R,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(G,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(B,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(cr,bmpBackGround1.Width,bmpBackGround1.Height);SetLength(cg,bmpBackGround1.Width,bmpBackGround1.Height);SetLength(cb,bmpBackGround1.Width,bmpBackGround1.Height);SetLength(crResult,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(cgResult,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(cbResult,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(pixColorBG,bmpBackGround1.Width,bmpBackGround1.Height);SetLength(pixColorTexture,bmpTexture1.Width+128,bmpTexture1.Height+128);SetLength(pixColorBGBak,bmpBackGround1.Width,bmpBackGround1.Height);//纹理图的灰阶图 SetLength(cgray,bmpBackGround1.Width,bmpBackGround1.Height);//纹理图的灰阶图颜色分量 bmpNewTexture:=TBitmap.Create;bmpNewTexture.Assign(bmpTexture);bmpBackgroundBak:=TBitmap.Create;bmpBackgroundBak.Assign(bmpBackGround1);replaceFactor:=TrackBar4.Position;//置换因子,调整扭曲度用 //纹理区域内背景灰阶图生成 fori:=1tobmpTexture.Widthdoforj:=1tobmpTexture.HeightdobeginpixColorBG[i][j]:=bmpBackGround1.Canvas.Pixels[i+moveX,j+moveY];//获得图像灰阶图 cr[i][j]:=GetRValue(pixColorBG[i][j]);//背景图红色分量 cg[i][j]:=GetGValue(pixColorBG[i][j]);//背景图绿色分量 cb[i][j]:=GetBValue(pixColorBG[i][j]);//背景图蓝色分量 cgray[i][j]:=(cr[i][j]+cg[i][j]+cb[i][j])div3;//获得纹理区域在背景图的灰阶图各个像素的颜色分量算数平均求灰度 //显示灰度图 //bmpBackgroundBak.Canvas.Pixels[i+moveX,j+moveY]:=RGB(cgray[i][j],cgray[i][j],cgray[i][j]);//生成背景灰度图 end;//纹理图颜色分量 fori:=1tobmpTexture1.Widthdoforj:=1tobmpTexture1.HeightdobeginpixColorTexture[i][j]:=bmpTexture1.Canvas.Pixels[i,j];R[i][j]:=GetRValue(pixColorTexture[i][j]);//纹理图红色分量 G[i][j]:=GetGValue(pixColorTexture[i][j]);//纹理图绿色分量 B[i][j]:=GetBValue(pixColorTexture[i][j]);//纹理图蓝色分量 end;//置换特效图生成效果图区域(bmpTexture.Width)*(bmpTexture.Height) fori:=1tobmpTexture.Widthdoforj:=1tobmpTexture.Heightdobegin//***********************************算法说明**********************************************//左点和上点像素判断情况,默认情况下选择做点和上点像素作为判断基准。 //如果目标像素左边一像素的灰度值>128,则将目标像素向上移动(目标像素点灰阶值-128)*置换因子的距离 //否则目标像素左边一像素的灰度值<128,则将目标像素向下移动(128-目标像素点灰阶值)*置换因子的距离 //*****************************************************************************************if(cgray[i-1][j]>128)and(j-(cgray[i][j]-128)*replaceFactordiv100>=1)thenbegincrResult[i][j-(cgray[i][j]-128)*replaceFactordiv100]:=R[i][j];cgResult[i][j-(cgray[i][j]-128)*replaceFactordiv100]:=G[i][j];cbResult[i][j-(cgray[i][j]-128)*replaceFactordiv100]:=B[i][j];crResult[i][j]:=R[i][j];cgResult[i][j]:=G[i][j];cbResult[i][j]:=B[i][j];endelseif(cgray[i-1][j]<128)and(j+(128-cgray[i][j])*replaceFactordiv100<=bmpTexture.Height)thenbegincrResult[i][j+(128-cgray[i][j])*replaceFactordiv100]:=R[i][j];cgResult[i][j+(128-cgray[i][j])*replaceFactordiv100]:=G[i][j];cbResult[i][j+(128-cgray[i][j])*replaceFactordiv100]:=B[i][j];crResult[i][j]:=R[i][j];cgResult[i][j]:=G[i][j];cbResult[i][j]:=B[i][j];end;//************************************************************************************************* //如果目标像素上边一像素的灰度值>128,则将目标像素向左移动(目标像素点灰阶值-128)*置换比例的距离 //否则目标像素上边一像素的灰度值<128,则将目标像素向右移动(128-目标像素点灰阶值)*置换比例的距离 //************************************************************************************************* if(cgray[i][j-1]>128)and(i-(cgray[i][j]-128)*replaceFactordiv100>=1)thenbegincrResult[i-(cgray[i][j]-128)*replaceFactordiv100][j]:=R[i][j];cgResult[i-(cgray[i][j]-128)*replaceFactordiv100][j]:=G[i][j];cbResult[i-(cgray[i][j]-128)*replaceFactordiv100][j]:=B[i][j];crResult[i][j]:=R[i][j];cgResult[i][j]:=G[i][j];cbResult[i][j]:=B[i][j];endelseif(cgray[i][j-1]<128)and(i+(128-cgray[i][j])*replaceFactordiv100<bmpTexture.Width)thenbegincrResult[i+(128-cgray[i][j])*replaceFactordiv100][j]:=R[i][j];cgResult[i+(128-cgray[i][j])*replaceFactordiv100][j]:=G[i][j];cbResult[i+(128-cgray[i][j])*replaceFactordiv100][j]:=B[i][j];crResult[i][j]:=R[i][j];cgResult[i][j]:=G[i][j];cbResult[i][j]:=B[i][j];end;//************************************************************************************************* //右点和下点像素判断情况 //如果目标像素右边一像素的灰度值>128,则将目标像素向上移动(目标像素点灰阶值-128)*置换因子的距离 //否则目标像素右边一像素的灰度值<128,则将目标像素向下移动(128-目标像素点灰阶值)*置换因子的距离 //如果目标像素下边一像素的灰度值>128,则将目标像素向左移动(点上的灰阶值-128)*置换比例的距离 //否则目标像素下边一像素的灰度值<128,则将目标像素向右移动(128-目标像素点灰阶值)*置换比例的距离 //************************************************************************************************* //************************************************************************************************* //如果目标像素点上下左右像素灰度都为128则不发生移动 //************************************************************************************************* if(cgray[i-1][j]=128)and(cgray[i+1][j]=128)and(cgray[i][j-1]=128)and(cgray[i][j+1]=128)thenbegincrResult[i][j]:=R[i][j];cgResult[i][j]:=G[i][j];cbResult[i][j]:=B[i][j];end;end;//像素绘制图形 fori:=1tobmpTexture.Widthdoforj:=1tobmpTexture.Heightdobegin//消除黑点 ifcrResult[i][j]<>clBlackthenbmpNewTexture.Canvas.Pixels[i,j]:=RGB(crResult[i][j],cgResult[i][j],cbResult[i][j]);end;//混合图形纹理效果 Result:=createMixImg(bmpBackGround1,bmpNewTexture,TrackBar2.Position,TrackBar3.Position);end;//============================================================================== //调节背景图亮度对比度 //参数定义brightness亮度 //contrast对比度 //============================================================================== functionTForm1.BrightnessAndContrast(brightness:Integer;contrast:Integer):TBitmap;varpixColorBG:TColor;//背景图像素颜色 bmpBGBak:TBitmap;//背景图备份 cr,cg,cb:double;//背景像素颜色分量 cgray:DWORD;//背景图的灰阶图颜色分量 R,G,B:double;ir,ig,ib:Integer;i,j:Integer;beginbmpBGBak:=TBitmap.Create;bmpBGBak.Assign(bmpBackGround);//算法公式 fori:=1tobmpBackGround.Widthdoforj:=1tobmpBackGround.HeightdobeginpixColorBG:=bmpBackGround.Canvas.Pixels[i,j];//获得图像RGB分量 cr:=GetRValue(pixColorBG);cg:=GetGValue(pixColorBG);cb:=GetBValue(pixColorBG);{//黑白2色图,contrast=0时图片只有黑白2色cgray:=(cr+cg+cb)div3;ifcgray>128thenbegin//加亮R:=cr*contrastdiv100+brightness;G:=cg*contrastdiv100+brightness;B:=cb*contrastdiv100+brightness;endelseifcgray=128thenbegin//不变R:=cr;G:=cg;B:=cb;endelsebegin//减暗R:=cr*contrastdiv100-brightness;G:=cg*contrastdiv100-brightness;B:=cb*contrastdiv100-brightness;end;}//背景图RGB分量调整亮度 {R:=cr*contrastdiv100+brightness;G:=cg*contrastdiv100+brightness;B:=cb*contrastdiv100+brightness;}//对比度调整调节后像素点颜色=((RGB/255.0-0.5)*contrast+0.5)*255+brightness; //处理颜色越界 R:=((cr/255-0.5)*contrast+0.5)*255+brightness;G:=((cg/255-0.5)*contrast+0.5)*255+brightness;B:=((cb/255-0.5)*contrast+0.5)*255+brightness;//ifpixColorBG>255thenpixColorBG:=255elseifpixColorBG<0thenpixColorBG:=0; ifR>255thenR:=255elseifR<0thenR:=0;ifG>255thenG:=255elseifG<0thenG:=0;ifB>255thenB:=255elseifB<0thenB:=0;bmpBGBak.Canvas.Pixels[i,j]:=RGB(Round(R),Round(G),Round(B));end;Image1.Picture.Assign(bmpBGBak);Result:=bmpBGBak;end;//============================================================================== //置换按钮 //============================================================================== procedureTForm1.Button1Click(Sender:TObject);beginifisLoadTexture=TrueandisLoadBackGround=TruethenbeginGroupBox1.Caption:='置换特效图片';Image1.Picture:=nil;//释放图片 Image1.Canvas.Draw(0,0,replacementEffect(BrightnessAndContrast(trackbar5.Position,trackbar6.Position),bmpTexture,TrackBar2.Position,TrackBar3.Position));endelsebeginShowMessage('请先载入纹理图片及背景图片');end;end;//============================================================================== //置换因子调整 //============================================================================== procedureTForm1.TrackBar4Change(Sender:TObject);beginLabel4.Caption:='ReplaceFactor:'+IntToStr(TrackBar4.Position);end;//============================================================================== //亮度因子调整 //============================================================================== procedureTForm1.TrackBar5Change(Sender:TObject);begin//BrightnessAndContrast(0,105); label5.Caption:='Brightness:'+InttoStr(trackbar5.Position);end;//============================================================================== //对比度因子调整按钮 //============================================================================== procedureTForm1.TrackBar6Change(Sender:TObject);begin//BrightnessAndContrast(0,105); label6.Caption:='Contrast:'+InttoStr(trackbar6.Position);end;//============================================================================== //确认亮度对比度按钮 //============================================================================== procedureTForm1.Button3Click(Sender:TObject);beginBrightnessAndContrast(trackbar5.Position,trackbar6.Position);end;end.

效果图

1.原背景

2

2。原纹理

3.合成效果1

4.合成效果2

界面代码:

objectForm1:TForm1Left=168Top=177Width=1000Height=721Caption=#22270#20687#22788#29702','#32993#30591#21046#20316'DEMO'#65292'QQ'#65306'235483710'Color=clBtnFaceFont.Charset=DEFAULT_CHARSETFont.Color=clWindowTextFont.Height=-11Font.Name='MSSansSerif'Font.Style=[]OldCreateOrder=FalsePosition=poMainFormCenterOnCreate=FormCreatePixelsPerInch=96TextHeight=13objectLabel7:TLabelLeft=672Top=600Width=7Height=13Caption='X'endobjectLabel8:TLabelLeft=672Top=624Width=7Height=13Caption='Y'endobjectLabel1:TLabelLeft=632Top=552Width=27Height=13Caption='Alpha'endobjectLabel2:TLabelLeft=480Top=656Width=33Height=13Caption='<<<-----'endobjectLabel3:TLabelLeft=480Top=624Width=33Height=13Caption='<<<-----'endobjectLabel4:TLabelLeft=721Top=672Width=73Height=13Caption='ReplaceFactor'endobjectLabel5:TLabelLeft=16Top=616Width=49Height=13Caption='Brightness'endobjectLabel6:TLabelLeft=16Top=648Width=39Height=13Caption='Contrast'endobjectLabel9:TLabelLeft=224Top=624Width=32Height=13Caption='Label9'endobjectBitBtn1:TBitBtnLeft=16Top=16Width=89Height=25Caption=#23548#20837#32972#26223#22270#29255TabOrder=0OnClick=BitBtn1ClickendobjectBitBtn2:TBitBtnLeft=520Top=16Width=89Height=25Caption=#23548#20837#32441#29702#22270#29255TabOrder=1OnClick=BitBtn2ClickendobjectGroupBox1:TGroupBoxLeft=16Top=48Width=457Height=553Caption=#32972#26223#22270#29255TabOrder=2objectImage1:TImageLeft=8Top=16Width=441Height=513AutoSize=TrueCenter=TrueendendobjectGroupBox2:TGroupBoxLeft=520Top=48Width=457Height=489Caption=#32441#29702#22270#29255TabOrder=3objectImage2:TImageLeft=8Top=16Width=441Height=449Center=TrueendendobjectBitBtn3:TBitBtnLeft=520Top=616Width=129Height=28Caption=#28151#21512#28342#35299TabOrder=4OnClick=BitBtn3ClickendobjectTrackBar1:TTrackBarLeft=712Top=552Width=257Height=33Ctl3D=TrueMax=255ParentCtl3D=FalseFrequency=55Position=125TabOrder=5OnChange=TrackBar1ChangeendobjectButton2:TButtonLeft=520Top=584Width=129Height=28Caption=#31227#21160#21040#32972#26223#22352#26631TabOrder=6OnClick=Button2ClickendobjectTrackBar2:TTrackBarLeft=712Top=584Width=257Height=33Frequency=10TabOrder=7OnChange=TrackBar2ChangeendobjectTrackBar3:TTrackBarLeft=712Top=616Width=257Height=33Frequency=10TabOrder=8OnChange=TrackBar3ChangeendobjectButton1:TButtonLeft=520Top=656Width=129Height=25Caption=#32622#25442#29305#25928TabOrder=9OnClick=Button1ClickendobjectTrackBar4:TTrackBarLeft=712Top=640Width=257Height=33Max=100Min=1Frequency=20Position=1TabOrder=10OnChange=TrackBar4ChangeendobjectTrackBar5:TTrackBarLeft=96Top=616Width=233Height=33Max=100Frequency=55TabOrder=11OnChange=TrackBar5ChangeendobjectTrackBar6:TTrackBarLeft=96Top=640Width=233Height=33Max=100Min=-100Frequency=55Position=1TabOrder=12OnChange=TrackBar6ChangeendobjectButton3:TButtonLeft=336Top=616Width=113Height=25Caption=#30830#35748#2#24230#23545#27604#24230TabOrder=13OnClick=Button3ClickendobjectOpenDialog1:TOpenDialogFilter='bmp'#25991#4'|*.bmp'Left=104Top=16endobjectOpenDialog2:TOpenDialogFilter='bmp'#25991#4'|*.bmp'Left=608Top=16endend

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。