请选择 进入手机版 | 继续访问电脑版
Gdiplus类(GDI+)是原生态UI自绘界面框架,速度快,兼容好,灵活度高,体积小无多余附属文件...
群主admin 天启
查看: 158|回复: 7

[自由交流] 这个PS 的这种渐变。一直想不出来是怎么画的。

[复制链接]
发表于 2020-8-22 16:46:17 | 显示全部楼层 |阅读模式
本帖最后由 iYuYan 于 2020-8-22 16:48 编辑

Snipaste_2020-08-22_16-43-54.bmp



GDI+怎么实现呢。。。谁了解,谁了解
发表于 2020-8-24 15:06:48 | 显示全部楼层
ip68681 发表于 2020-8-23 01:59
我发不了附件,我上传就提示上传错误。

你上传的是.e格式,附件只允许这些格式: jpg,jpeg,gif,bmp,png,txt,zip,rar
楼主 发表于 2020-8-24 00:40:27 | 显示全部楼层
ip68681 发表于 2020-8-23 01:59
我发不了附件,我上传就提示上传错误。

我在网上找到了。感谢分享。
发表于 2020-8-23 01:59:53 | 显示全部楼层
我发不了附件,我上传就提示上传错误。
楼主 发表于 2020-8-23 00:22:09 | 显示全部楼层
ip68681 发表于 2020-8-23 00:03
.版本 2
.支持库 spec
.支持库 eAPI

你这个很像,很像,怎么不上传附件呢。
发表于 2020-8-23 00:03:48 | 显示全部楼层
.版本 2
.支持库 spec
.支持库 eAPI

.程序集 窗口程序集_启动窗口
.程序集变量 m_token, 整数型
.程序集变量 m_hdc, 整数型
.程序集变量 m_graphics, 整数型
.程序集变量 m_solidBrush, 整数型
.程序集变量 GdiStartupInput, GdiplusStartupInput
.程序集变量 OldWndProc, 整数型

.子程序 __启动窗口_创建完毕

GdiStartupInput.GdiplusVersion = 2
GdiplusStartup (m_token, GdiStartupInput, 0)
' 在什么窗口上绘制 m_hdc
调试输出 (m_token)
m_hdc = GetDC (取窗口句柄 ())

OldWndProc = SetWindowLongA (取窗口句柄 (), #GWL_WNDPROC, 到整数 (&窗口回调函数))
自绘颜色表 ()

.子程序 __启动窗口_将被销毁

GdiplusShutdown (m_token)
' 窗口销毁 ,关闭GDI+

.子程序 自绘颜色表
.局部变量 行, 整数型
.局部变量 列, 整数型
.局部变量 rect, 矩形数据
.局部变量 nColor, 整数型
.局部变量 hBrush, 整数型
.局部变量 d, 整数型
.局部变量 c, 小数型
.局部变量 a, 整数型
.局部变量 b, 整数型

' GdipCreateFromHDC (m_hdc, m_graphics)
' GdipCreateFromHwnd()
GdipCreateFromHWND (取窗口句柄 (), m_graphics)
' 颜色代码的公式如下
.变量循环首 (255, 127, -1, d)
    c = (2 × d - 255) ÷ 40
    .变量循环首 (1, 240, 1, a)
        .判断开始 (a < 40)
            b = 取颜色值 (d, (a - 1) × c + 255 - d, 255 - d)
        .判断 (a ≥ 40 且 a < 80)
            b = 取颜色值 (d - (a - 40) × c, d, 255 - d)
        .判断 (a ≥ 80 且 a < 120)
            b = 取颜色值 (255 - d, d, (a - 80) × c + 255 - d)
        .判断 (a ≥ 120 且 a < 160)
            b = 取颜色值 (255 - d, d - (a - 120) × c, d)
        .判断 (a ≥ 160 且 a < 200)
            b = 取颜色值 ((a - 160) × c + 255 - d, 255 - d, d)
        .判断 (a ≥ 200 且 a ≤ 240)
            b = 取颜色值 (d, 255 - d, d - (a - 200) × c)
        .默认

        .判断结束
        ' //创建实心画刷
        GdipCreateSolidFill (RGB2ARGB (b, 255), m_solidBrush)
        ' //填充矩形
        GdipFillRectangle (m_graphics, m_solidBrush, a, 256 - d, 1, 1)
        ' //删除创建的画刷
        GdipDeleteBrush (m_solidBrush)
    .变量循环尾 ()
.变量循环尾 ()
GdipDeleteGraphics (m_graphics)
' //销毁GDI+图形对象

.子程序 RGB2ARGB, 整数型, , 转换成GDI 的颜色值
.参数 RGB颜色, 整数型
.参数 透明度, 整数型, 可空, 0-255
.局部变量 Color, 字节集

.如果真 (是否为空 (透明度))
    透明度 = 255
.如果真结束
Color = 到字节集 (RGB颜色)
RGB颜色 = 位或 (Color [3] + Color [2] × 256 + Color [1] × 65536, 左移 (透明度, 24))
返回 (RGB颜色)

.子程序 ARGB, 整数型, 公开
.参数 R, 整数型
.参数 G, 整数型
.参数 B, 整数型
.参数 A, 整数型

返回 (B + 左移 (G, 8 × 1) + 左移 (R, 8 × 2) + 左移 (A, 8 × 3))

.子程序 窗口回调函数, 整数型
.参数 hwnd, 整数型
.参数 msg, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 ps, PAINTSTRUCT
.局部变量 rect, 矩形数据

.如果真 (msg = #WM_PAINT)
    BeginPaint (hwnd, ps)
    GetClientRect (hwnd, rect)
    FillRect (m_hdc, rect, GetStockObject (#WHITE_BRUSH))
    自绘颜色表 ()
    EndPaint (hwnd, ps)
    返回 (0)
.如果真结束

返回 (CallWindowProcA (OldWndProc, hwnd, msg, wParam, lParam))




填充矩形,给每个矩形填充不同的颜色。颜色是从官方论坛神2抄的。他那个是用画板实现的。不知道这样发违规的,我写的不知道咋适应大小。
2345截图20200822235022.png
2345截图20200823000253.png
楼主 发表于 2020-8-22 19:57:47 | 显示全部楼层

很棒,有点相似。在底部那个好像还有一层灰色渐变还是怎么的。
发表于 2020-8-22 17:13:24 | 显示全部楼层
20200822170831.png
仿PS调色板.rar (14.01 KB, 下载次数: 3)
快速回复 返回列表 返回顶部