Delphi基本图像处理方法.docx
- 文档编号:10784516
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:16
- 大小:24.35KB
Delphi基本图像处理方法.docx
《Delphi基本图像处理方法.docx》由会员分享,可在线阅读,更多相关《Delphi基本图像处理方法.docx(16页珍藏版)》请在冰豆网上搜索。
Delphi基本图像处理方法
本文实例汇总了Delphi基本图像处理方法。
分享给大家供大家参考。
具体分析如下:
//浮雕procedureEmboss(SrcBmp,DestBmp:
TBitmap;AzimuthChange:
integer;overload;vari,j,Gray,Azimuthvalue,R,G,B:
integer;SrcRGB,SrcRGB1,SrcRGB2,DestRGB:
pRGBTriple;beginfori:
=0toSrcBmp.Height-1dobeginSrcRGB:
=SrcBmp.ScanLine[i];DestRGB:
=DestBmp.ScanLine[i];if(AzimuthChange>=-180and(AzimuthChange<-135thenbeginifi>0thenSrcRGB1:
=SrcBmp.ScanLine[i-1]elseSrcRGB1:
=SrcRGB;Inc(SrcRGB1;SrcRGB2:
=SrcRGB;Inc(SrcRGB2;endelseif(AzimuthChange>=-135and(AzimuthChange<-90thenbeginifi>0thenSrcRGB1:
=SrcBmp.ScanLine[i-1]elseSrcRGB1:
=SrcRGB;SrcRGB2:
=SrcRGB1;Inc(SrcRGB2;endelseif(AzimuthChange>=-90and(AzimuthChange<-45thenbeginifi>0thenSrcRGB1:
=SrcBmp.ScanLine[i-1]elseSrcRGB1:
=SrcRGB;SrcRGB2:
=SrcRGB1;endelseif(AzimuthChange>=-45and(AzimuthChange<0thenbeginSrcRGB1:
=SrcRGB;ifi>0thenSrcRGB2:
=SrcBmp.ScanLine[i-1]elseSrcRGB2:
=SrcRGB;endelseif(AzimuthChange>=0and(AzimuthChange<45thenbeginSrcRGB2:
=SrcRGB;if(i =SrcBmp.ScanLine[i+1]elseSrcRGB1: =SrcRGB;endelseif(AzimuthChange>=45and(AzimuthChange<90thenbeginif(i =SrcBmp.ScanLine[i+1]elseSrcRGB1: =SrcRGB;SrcRGB2: =SrcRGB1;endelseif(AzimuthChange>=90and(AzimuthChange<135thenbeginif(i =SrcBmp.ScanLine[i+1]elseSrcRGB1: =SrcRGB;SrcRGB2: =SrcRGB1;Inc(SrcRGB1;endelseif(AzimuthChange>=135and(AzimuthChange<=180thenbeginif(i =SrcBmp.ScanLine[i+1]elseSrcRGB2: =SrcRGB;Inc(SrcRGB2;SrcRGB1: =SrcRGB;Inc(SrcRGB1;end;forj: =0toSrcBmp.Width-1dobeginif(AzimuthChange>=-180and(AzimuthChange<-135thenbeginAzimuthvalue: =AzimuthChange+180;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=-135and(AzimuthChange<-90thenbeginAzimuthvalue: =AzimuthChange+135;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcR GB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=-90and(AzimuthChange<-45thenbeginifj=1thenInc(SrcRGB1,-1;Azimuthvalue: =AzimuthChange+90;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=-45and(AzimuthChange<0thenbeginifj=1thenbeginInc(SrcRGB1,-1;Inc(SrcRGB2,-1;end;Azimuthvalue: =AzimuthChange+45;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=0and(AzimuthChange<45thenbeginifj=1thenbeginInc(SrcRGB1,-1;Inc(SrcRGB2,-1;end;Azimuthvalue: =AzimuthChange;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=45and(AzimuthChange<90thenbeginifj=1thenInc(SrcRGB2,-1;Azimuthvalue: =AzimuthChange-45;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=90and(AzimuthChange<135thenbeginAzimuthvalue: =AzimuthChange-90;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGreen*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;endelseif(AzimuthChange>=135and(AzimuthChange<=180thenbeginAzimuthvalue: =AzimuthChange-135;R: =SrcRGB.rgbtRed-((SrcRGB1.rgbtRed*Azimuthvaluediv45-((SrcRGB2.rgbtRed*(45-Azimuthvaluediv45+78;G: =SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen*Azimuthvaluediv45-((SrcRGB2.rgbtGree n*(45-Azimuthvaluediv45+78;B: =SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue*Azimuthvaluediv45-((SrcRGB2.rgbtBlue*(45-Azimuthvaluediv45+78;end;R: =Min(R,255;R: =Max(R,0;G: =Min(G,255;G: =Max(G,0;B: =Min(B,255;B: =Max(B,0;Gray: =(Rshr2+(Rshr4+(Gshr1+(Gshr4+(Bshr3;DestRGB.rgbtRed: =Gray;DestRGB.rgbtGreen: =Gray;DestRGB.rgbtBlue: =Gray;if(j=-180and(AzimuthChange<-135or((AzimuthChange>=90and(AzimuthChange<=180thenbeginInc(SrcRGB1;end;if(j=135and(AzimuthChange<180or((AzimuthChange>=-180and(AzimuthChange<=-90thenbeginInc(SrcRGB2;end;Inc(SrcRGB;Inc(DestRGB;end;end;end;procedureEmboss(Bmp: TBitmap;AzimuthChange: integer;ElevationChange: integer;WeightChange: integer;overload;varDestBmp: TBitmap;begin DestBmp: =TBitmap.Create; DestBmp.Assign(Bmp; Emboss(Bmp,DestBmp,AzimuthChange,ElevationChange,WeightChange; Bmp.Assign(DestBmp;end;//反色procedureNegative(Bmp: TBitmap;vari,j: Integer;PRGB: pRGBTriple;beginBmp.PixelFormat: =pf24Bit;fori: =0toBmp.Height-1dobeginPRGB: =Bmp.ScanLine[i];forj: =0toBmp.Width-1dobeginPRGB^.rgbtRed: =notPRGB^.rgbtRed;PRGB^.rgbtGreen: =notPRGB^.rgbtGreen;PRGB^.rgbtBlue: =notPRGB^.rgbtBlue;Inc(PRGB;end;end;end;//曝光procedureExposure(Bmp: TBitmap;vari,j: integer;PRGB: pRGBTriple;beginBmp.PixelFormat: =pf24Bit;fori: =0toBmp.Height-1dobeginPRGB: =Bmp.ScanLine[i];forj: =0toBmp.Width-1dobeginifPRGB^.rgbtRed<128thenPRGB^.rgbtRed: =notPRGB^.rgbtRed;ifPRGB^.rgbtGreen<128thenPRGB^.rgbtGreen: =notPRGB^.rgbtGreen;ifPRGB^.rgbtBlue<128thenPRGB^.rgbtBlue: =notPRGB^.rgbtBlue;Inc(PRGB;end;end;end;//模糊procedureBlur(SrcBmp: TBitmap;vari,j: Integer;SrcRGB: pRGBTriple;SrcNextRGB: pRGBTriple;SrcPreRGB: pRGBTriple;Value: Integer;procedureIncRGB;beginInc(SrcPreRGB;Inc(SrcRGB;Inc(SrcNextRGB;end;procedureDecRGB;beginInc(SrcPreRGB,-1;Inc(SrcRGB,-1;Inc(SrcNextRGB,-1;end;beginSrcBmp.PixelFormat: =pf24Bit;fori: =0toSrcBmp.Height-1dobeginifi>0thenSrcPreRGB: =SrcBmp.ScanLine[i-1]elseSrcPreRGB: =SrcBmp.ScanLine[i];SrcRGB: =SrcBmp.ScanLine[i];ifi =SrcBmp.ScanLine[i+1]elseSrcNextRGB: =SrcBmp.ScanLine[i];forj: =0toSrcBmp.Width-1dobeginifj>0thenDecRGB;Value: =SrcPreRGB.rgbtRed+SrcRGB.rgbtRed+SrcNextRGB.rgbtRed;ifj>0thenIncRGB;Value: =Value+SrcPreRGB.rgbtRed+SrcRGB.rgbtRed+SrcNextRGB.rgbtRed;ifj =(Value+SrcPreRGB.rgbtRed+SrcRGB.rgbtRed+SrcNextRGB.rgbtReddiv9;DecRGB;SrcRGB.rgbtRed: =value; ifj>0thenDecRGB;Value: =SrcPreRGB.rgbtGreen+SrcRGB.rgbtGreen+SrcNextRGB.rgbtGreen;ifj>0thenIncRGB;Value: =Value+SrcPreRGB.rgbtGreen+SrcRGB.rgbtGreen+SrcNextRGB.rgbtGreen;ifj =(Value+SrcPreRGB.rgbtGreen+SrcRGB.rgbtGreen+SrcNextRGB.rgbtGreendiv9;DecRGB;SrcRGB.rgbtGreen: =value;ifj>0thenDecRGB;Value: =SrcPreRGB.rgbtBlue+SrcRGB.rgbtBlue+SrcNextRGB.rgbtBlue;ifj>0thenIncRGB;Value: =Value+SrcPreRGB.rgbtBlue+SrcRGB.rgbtBlue+SrcNextRGB.rgbtBlue;ifj =(Value+SrcPreRGB.rgbtBlue+SrcRGB.rgbtBlue+SrcNextRGB.rgbtBluediv9;DecRGB;SrcRGB.rgbtBlue: =value;IncRGB;end;end;end;//锐化procedureSharpen(SrcBmp: TBitmap;vari,j: integer;SrcRGB: pRGBTriple;SrcPreRGB: pRGBTriple;Value: integer;beginSrcBmp.PixelFormat: =pf24Bit;fori: =0toSrcBmp.Height-1dobeginSrcRGB: =SrcBmp.ScanLine[i];ifi>0thenSrcPreRGB: =SrcBmp.ScanLine[i-1]elseSrcPreRGB: =SrcBmp.ScanLine[i];forj: =0toSrcBmp.Width-1dobeginifj=1thenDec(SrcPreRGB;Value: =SrcRGB.rgbtRed+(SrcRGB.rgbtRed-SrcPreRGB.rgbtReddiv2;Value: =Max(0,Value;Value: =Min(255,Value;SrcRGB.rgbtRed: =value;Value: =SrcRGB.rgbtGreen+(SrcRGB.rgbtGreen-SrcPreRGB.rgbtGreendiv2;Value: =Max(0,Value;Value: =Min(255,Value;SrcRGB.rgbtGreen: =value;Value: =SrcRGB.rgbtBlue+(SrcRGB.rgbtBlue-SrcPreRGB.rgbtBluediv2;Value: =Max(0,Value;Value: =Min(255,Value;SrcRGB.rgbtBlue: =value;Inc(SrcRGB;Inc(SrcPreRGB;end;end;end;[图像的旋转和翻转]以下代码用ScanLine配合指针移动实现,用于24位色! //旋转90度procedureRotate90(constBitmap: TBitmap;vari,j: Integer;rowIn,rowOut: pRGBTriple;Bmp: TBitmap;Width,Height: Integer;beginBmp: =TBitmap.Create;Bmp.Width: =Bitmap.Height;Bmp.Height: =Bitmap.Width;Bmp.PixelFormat: =pf24bit;Width: =Bitmap.Width-1;Height: =Bitmap.Height-1;forj: =0toHeightdobeginrowIn: =Bitmap.ScanLine[j];fori: =0toWidthdobeginrowOut: =Bmp.ScanLine[i];Inc(rowOut,Height-j;rowOut^: =rowIn^;Inc(rowIn;end;end;Bitmap.Assign(Bmp;end;//旋转180度procedureRotate180(constBitmap: TBitmap;vari,j: Integer;rowIn,rowOut: pRGBTriple;Bmp: TBitmap;Width,Height: Integer;beginBmp: =TBitmap.Create;Bmp.Width: =Bitmap.Width;Bmp.Height: =Bitmap.Height;Bmp.Pixe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Delphi 基本 图像 处理 方法