• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Delphi > Delphi基本图像处理方法汇总

Delphi基本图像处理方法汇总

作者:xujh 字体:[增加 减小] 来源:互联网 时间:2017-05-28

xujh 通过本文主要向大家介绍了delphi图像处理,delphi 图像处理控件,delphi 图像识别,delphi 图像控件,delphi图像分割等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例汇总了Delphi基本图像处理方法。分享给大家供大家参考。具体分析如下:

//浮雕
procedure Emboss(SrcBmp,DestBmp:TBitmap;AzimuthChange:integer);overload;
var
 i, j, Gray, Azimuthvalue, R, G, B: integer;
 SrcRGB, SrcRGB1, SrcRGB2, DestRGB: pRGBTriple;
begin
 for i := 0 to SrcBmp.Height - 1 do
 begin
  SrcRGB := SrcBmp.ScanLine[i];
  DestRGB := DestBmp.ScanLine[i];
  if (AzimuthChange >= -180) and (AzimuthChange < -135) then
  begin
   if i > 0 then
    SrcRGB1 := SrcBmp.ScanLine[i-1]
   else
    SrcRGB1 := SrcRGB;
   Inc(SrcRGB1);
   SrcRGB2 := SrcRGB;
   Inc(SrcRGB2);
  end
  else if (AzimuthChange >= -135) and (AzimuthChange < -90) then
  begin
   if i > 0 then
    SrcRGB1 := SrcBmp.ScanLine[i-1]
   else
    SrcRGB1 := SrcRGB;
   SrcRGB2 := SrcRGB1;
   Inc(SrcRGB2);
  end
  else if (AzimuthChange >= -90) and (AzimuthChange < -45) then
  begin
   if i > 0 then
    SrcRGB1 := SrcBmp.ScanLine[i-1]
   else
    SrcRGB1 := SrcRGB;
   SrcRGB2 := SrcRGB1;
  end
  else if (AzimuthChange >= -45) and (AzimuthChange < 0) then
  begin
   SrcRGB1 := SrcRGB;
   if i > 0 then
    SrcRGB2 := SrcBmp.ScanLine[i-1]
   else
    SrcRGB2 := SrcRGB;
  end
  else if (AzimuthChange >= 0) and (AzimuthChange < 45) then
  begin
   SrcRGB2 := SrcRGB;
   if (i < SrcBmp.Height - 1) then
    SrcRGB1 := SrcBmp.ScanLine[i+1]
   else
    SrcRGB1 := SrcRGB;
  end
  else if (AzimuthChange >= 45) and (AzimuthChange < 90) then
  begin
   if (i < SrcBmp.Height - 1) then
    SrcRGB1 := SrcBmp.ScanLine[i+1]
   else
    SrcRGB1 := SrcRGB;
   SrcRGB2 := SrcRGB1;
  end
  else if (AzimuthChange >= 90) and (AzimuthChange < 135) then
  begin
   if (i < SrcBmp.Height - 1) then
    SrcRGB1 := SrcBmp.ScanLine[i+1]
   else
    SrcRGB1 := SrcRGB;
   SrcRGB2 := SrcRGB1;
   Inc(SrcRGB1);
  end
  else if (AzimuthChange >= 135) and (AzimuthChange <= 180) then
  begin
   if (i < SrcBmp.Height - 1) then
    SrcRGB2 := SrcBmp.ScanLine[i+1]
   else
    SrcRGB2 := SrcRGB;
   Inc(SrcRGB2);
   SrcRGB1 := SrcRGB;
   Inc(SrcRGB1);
  end;
  for j := 0 to SrcBmp.Width - 1 do
  begin
   if (AzimuthChange >= -180) and (AzimuthChange < -135) then
   begin
    Azimuthvalue := AzimuthChange + 180;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= -135) and (AzimuthChange < -90) then
   begin
    Azimuthvalue := AzimuthChange + 135;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= -90) and (AzimuthChange < -45) then
   begin
    if j=1 then Inc(SrcRGB1,-1);
    Azimuthvalue := AzimuthChange + 90;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= -45) and (AzimuthChange < 0) then
   begin
    if j=1 then
    begin
     Inc(SrcRGB1,-1);
     Inc(SrcRGB2,-1);
    end;
    Azimuthvalue := AzimuthChange + 45;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= 0) and (AzimuthChange < 45) then
   begin
    if j=1 then
    begin
     Inc(SrcRGB1,-1);
     Inc(SrcRGB2,-1);
    end;
    Azimuthvalue := AzimuthChange;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= 45) and (AzimuthChange < 90) then
   begin
    if j=1 then Inc(SrcRGB2,-1);
    Azimuthvalue := AzimuthChange - 45;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= 90) and (AzimuthChange < 135) then
   begin
    Azimuthvalue := AzimuthChange - 90;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+78;
   end
   else if (AzimuthChange >= 135) and (AzimuthChange <= 180) then
   begin
    Azimuthvalue := AzimuthChange - 135;
    R:=SrcRGB.rgbtRed-((SrcRGB1.rgbtRed)*Azimuthvalue div 45)-((SrcRGB2.rgbtRed)*(45-Azimuthvalue) div 45)+78;
    G:=SrcRGB.rgbtGreen-((SrcRGB1.rgbtGreen)*Azimuthvalue div 45)-((SrcRGB2.rgbtGreen)*(45-Azimuthvalue) div 45)+78;
    B:=SrcRGB.rgbtBlue-((SrcRGB1.rgbtBlue)*Azimuthvalue div 45)-((SrcRGB2.rgbtBlue)*(45-Azimuthvalue) div 45)+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 := (R shr 2) + (R shr 4) + (G shr 1) + (G shr 4) + (B shr 3);
   DestRGB.rgbtRed:=Gray;
   DestRGB.rgbtGreen:=Gray;
   DestRGB.rgbtBlue:=Gray;
   if (j=-180) and (AzimuthChange<-135)) or ((AzimuthChange>=90) and (AzimuthChange<=180))) then
   begin
    Inc(SrcRGB1);
   end;
   if (j=135) and (AzimuthChange<180)) or ((AzimuthChange>=-180) and (AzimuthChange<=-90))) then
   begin
    Inc(SrcRGB2);
   end;
   Inc(SrcRGB);
   Inc(DestRGB);
  end;
 end;
end;
procedure Emboss(Bmp:TBitmap;AzimuthChange:integer;ElevationChange:integer;WeightChange:integer);overload;
var
 DestBmp:TBitmap;
begin
  DestBmp:=TBitmap.Create;
  DestBmp.Assign(Bmp);
  Emboss(Bmp,DestBmp,AzimuthChange,ElevationChange,WeightChange);
  Bmp.Assign(DestBmp);
end;
//反色
procedure Negative(Bmp:TBitmap);
var
 i, j: Integer;
 PRGB: pRGBTriple;
begin
 Bmp.PixelFormat:=pf24Bit;
 for i := 0 to Bmp.Height - 1 do
 begin
  PRGB := Bmp.ScanLine[i];
  for j := 0 to Bmp.Width - 1 do
  begin
   PRGB^.rgbtRed :=not PRGB^.rgbtRed ;
   PRGB^.rgbtGreen :=not PRGB^.rgbtGreen;
   PRGB^.rgbtBlue :=not PRGB^.rgbtBlue;
   Inc(PRGB);
  end;
 end;
end;
//曝光
procedure Exposure(Bmp:TBitmap);
var
 i, j: integer;
 PRGB: pRGBTriple;
begin
 Bmp.PixelFormat:=pf24Bit;
 for i := 0 to Bmp.Height - 1 do
 begin
  PRGB := Bmp.ScanLine[i];
  for j := 0 to Bmp.Width - 1 do
  begin
   if PRGB^.rgbtRed<128 then
    PRGB^.rgbtRed :=not PRGB^.rgbtRed ;
   if PRGB^.rgbtGreen<128 then
    PRGB^.rgbtGreen :=not PRGB^.rgbtGreen;
   if P



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Delphi基本图像处理方法汇总
  • Delphi实现图像文本旋转特效完整实例代码

相关文章

  • 2017-05-28插件管理框架 for Delphi(二)
  • 2017-05-28Windows API GetLastError()函数返回值含义解释
  • 2017-05-28Delphi中对时间操作方法汇总
  • 2017-05-28Delphi实现树型结构具体实例
  • 2017-05-28Delphi创建开机启动项的方法示例
  • 2017-05-28Delphi书籍15本网盘下载地址整理
  • 2017-05-28delphi 正弦曲线图
  • 2017-05-28Delphi实现窗体感知鼠标滑过并自动隐藏与显示窗口的方法
  • 2017-05-28delphi制作wav文件的方法
  • 2017-05-28Delphi下OpenGL2d绘图之初始化流程详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Delphi用TActionList实现下载文件的方法
    • wordpress主题支持自定义菜单及修改css样式实现方法
    • Delphi实例演示Rect、Bounds生成TRect的区别
    • delphi建立、读取、存贮INI文件的方法《二》
    • Delphi7中Listview的常用功能汇总
    • Delphi编程常用快捷键大全
    • Delphi CLSIDFromProgID
    • delphi建立、读取、存贮INI文件的方法《三》
    • delphi字符串分隔函数用法实例
    • Delphi下OpenGL2d绘图之画点的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有