• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GDI+ 在Delphi程序的应用 -- Photoshop浮雕效果

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
实现图像浮雕效果的一般原理是,将图像上每个像素点与其对角线的像素点形成差值,使相似颜色值淡化,不同颜色值突出,从而产生纵深感,达到浮雕的效果,具体的做法是用处于对角线的2个像素值相减,再加上一个背景常数,一般为128而成。这种算法的特点是简单快捷,缺点是不能调节图像浮雕效果的角度和深度。

    用Photoshop实现图像浮雕效果,可以任意调节浮雕角度和深度(2个像素点的距离),还可以调整浮雕像素差值的数量。其基本算法原理和一般浮雕效果相同,但是具体做法不一样:对每个要处理的像素点,首先按照浮雕角度和深度计算处2个相应点的位置,然后计算这2个位置的颜色值,并使之形成差值,再乘上浮雕差值数量百分比,最后加上128的背景色。注意,这里计算的2个相应点是逻辑点,而不是实际的像素点,比如实现一个45度角,深度为3的图像浮雕效果,对每个像素点P(x, y),其对应的2个逻辑点的位置分别是P0(x - 3 * 0.7071 / 2, y - 3 * 0.7071 / 2)和P1(x + 3 * 0.7071 / 2, y + 3 * 0.7071 / 2),显然,对于这样的2个逻辑点,是不能直接从图像中找到其对应的像素点的,如果简单地对其四舍五入处理,将会造成大量的,由不同角度和深度而形成的相同的浮雕效果,这可不是我们想要的结果,而且使浮雕角度和深度参数失去了它原本的意义。为此,必须对原始图像按浮雕角度和深度进行缩放后,再对每个像素点进行浮雕效果处理,完毕再缩放回原图的大小,从而完成整个浮雕效果过程。下面是我经过反复试验后,写的Photoshop浮雕效果实现过程代码:

    数据类型:

  1. type
  2.   // 与GDI+ TBitmapData结构兼容的图像数据结构
  3.    TImageData = packed record
  4.      Width: LongWord;         // 图像宽度
  5.      Height: LongWord;        // 图像高度
  6.      Stride: LongWord;        // 图像扫描线字节长度
  7.      PixelFormat: LongWord;   // 未使用
  8.      Scan0: Pointer;          // 图像数据地址
  9.      Reserved: LongWord;      // 保留
  10.   end;
  11.    PImageData = ^TImageData;
  12. // 获取TBitmap图像的TImageData数据结构,便于处理TBitmap图像
  13. function GetImageData(Bmp: TBitmap): TImageData;
  14. begin
  15.    Bmp.PixelFormat := pf32bit;
  16.    Result.Width := Bmp.Width;
  17.    Result.Height := Bmp.Height;
  18.    Result.Scan0 := Bmp.ScanLine[Bmp.Height - 1];
  19.    Result.Stride := Result.Width shl 2;
  20. //   Result.Stride := (((32 * Bmp.Width) + 31) and $ffffffe0) shr 3;
  21. end;

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MatLab解线性方程组一文通(转帖) - Tisty发布时间:2022-07-18
下一篇:
用Matlab实现CGNR算法发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap