zoukankan      html  css  js  c++  java
  • GDI+ 在Delphi程序的应用 Photoshop浮雕效果

    实现图像浮雕效果的一般原理是,将图像上每个像素点与其对角线的像素点形成差值,使相似颜色值淡化,不同颜色值突出,从而产生纵深感,达到浮雕的效果,具体的做法是用处于对角线的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;
  • 相关阅读:
    安利一波这12个IDEA插件,太香了!
    作为Java新手,如何才能快速的看透一个Java项目?
    为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate
    为什么 ConcurrentHashMap 的读操作不需要加锁?
    MySQL索引的使用是怎么样的?5个点轻松掌握!
    掌握MyBatis插件原理轻松写出自己的PageHelper分页插件
    Spring中BeanFactory与FactoryBean到底有什么区别?
    MongoDB学习笔记(一)——Windows 下安装MongoDB
    ASP.Net WebAPI中添加helppage帮助页面
    C#代码实现在控制台输入密码显示星号
  • 原文地址:https://www.cnblogs.com/zzxap/p/2175986.html
Copyright © 2011-2022 走看看