去玻璃

本文介绍了如何在Windows Vista系统中禁用特定窗口的Aero玻璃效果,通过使用DwmSetWindowAttribute函数来定制窗口的非客户区渲染策略。
VC实现去掉vista窗口的玻璃效果
最近发现以前的自绘皮肤窗口,在VISTA系统开启玻璃效果的情况下,非客户区的皮肤总是被那层玻璃盖着,甚感烦躁,经过查找资料,发现那个玻璃效果是VISTA下有个dwm.exe弄的,微软给出了相关API,可以自己定制某个窗口的效果。
http://msdn.microsoft.com/en-us/library/aa969540.aspx,该API的介绍,如果英文不好的话,可以用火狐浏览器翻译该网页,效果还不错。

如果编译器是vs2008以上的版本的话,代码非常简单,只需要在窗口初始化的地方加下如下代码:

    DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
    DwmSetWindowAttribute(GetSafeHwnd(),DWMWA_NCRENDERING_POLICY,&ncrp,sizeof(ncrp));

再包含下#include <dwmapi.h>

如果编译环境低于VS2008并且没有 VISTA SDK的话是如下的代码:

由于编译环境中没有dwmapi.h文件,所以需要的一些定义就得自己加了,如下加了两个枚举。

enum DWMWINDOWATTRIBUTE
{
    DWMWA_NCRENDERING_ENABLED = 1,      // [get] Is non-client rendering enabled/disabled
        DWMWA_NCRENDERING_POLICY,           // [set] Non-client rendering policy
        DWMWA_TRANSITIONS_FORCEDISABLED,    // [set] Potentially enable/forcibly disable transitions
        DWMWA_ALLOW_NCPAINT,                // [set] Allow contents rendered in the non-client area to be visible on the DWM-drawn frame.
        DWMWA_CAPTION_BUTTON_BOUNDS,        // [get] Bounds of the caption button area in window-relative space.
        DWMWA_NONCLIENT_RTL_LAYOUT,         // [set] Is non-client content RTL mirrored
        DWMWA_FORCE_ICONIC_REPRESENTATION, // [set] Force this window to display iconic thumbnails.
        DWMWA_FLIP3D_POLICY,                // [set] Designates how Flip3D will treat the window.
        DWMWA_EXTENDED_FRAME_BOUNDS,        // [get] Gets the extended frame bounds rectangle in screen space
        DWMWA_LAST
};
typedef enum _DWMNCRENDERINGPOLICY {
    DWMNCRP_USEWINDOWSTYLE,
        DWMNCRP_DISABLED,
        DWMNCRP_ENABLED,
        DWMNCRP_LAST
} DWMNCRENDERINGPOLICY;

然后在动态链接库中得到去掉玻璃效果的函数(DwmSetWindowAttribute)进而执行该函数
    typedef HRESULT (WINAPI * TmpFun)(HWND,DWORD,LPCVOID,DWORD);
    HMODULE library = ::LoadLibrary("dwmapi.dll");

    TmpFun DwmSetWindowAttributeEX;
    if (0 != library)    
    {
        DwmSetWindowAttributeEX = (TmpFun)::GetProcAddress(library, 
            "DwmSetWindowAttribute");
        if (DwmSetWindowAttributeEX)
        {    
            DWMNCRENDERINGPOLICY ncrp = DWMNCRP_DISABLED;
            (*DwmSetWindowAttributeEX)(GetSafeHwnd(),DWMWA_NCRENDERING_POLICY,&ncrp,sizeof(ncrp));
            
        }
        VERIFY(::FreeLibrary(library));    
    }
### 关于毛玻璃效果的模糊技术 毛玻璃效果通常通过高斯模糊来实现,这是一种常见的图像处理技术。然而,在某些情况下可能需要对这种模糊的效果进行还原或者减少其影响。以下是几种可以用于毛玻璃效果模糊的技术和方法: #### 图像模糊的核心原理 图像模糊主要依赖逆滤波技术和正则化方法。这些技术试图恢复原始图像的信息,尽管由于噪声和其他因素的存在,完全恢复可能是不可能的[^1]。 #### 模糊的方法和技术 1. **逆滤波 (Inverse Filtering)** 逆滤波是一种基本的模糊算法,它尝试通过对模糊核矩阵求逆来重建清晰图像。这种方法对于简单的线性卷积模型有效,但在实际应用中容易受到噪声的影响而失效[^2]。 2. **维纳滤波 (Wiener Filter)** 维纳滤波是对逆滤波的一种改进,能够更好地应对噪声干扰。该方法引入了一个参数以平衡信噪比(SNR),从而提高恢复质量[^3]。 3. **迭代盲解卷积法** 当模糊核未知时,可采用迭代盲解卷积法估计并移除模糊效应。这类方法包括Richardson-Lucy算法及其变体,它们基于最大似然估计理论逐步优化结果[^4]。 4. **深度学习方法** 近年来,利用神经网络特别是卷积神经网络(CNNs)来进行图像模糊取得了显著进展。预训练好的CNN模型可以从大量样本数据中学到如何有效地除各种类型的运动模糊和散焦模糊[^5]。 #### 实现工具推荐 - MATLAB 和 Python 的 OpenCV 库提供了多种内置函数支持上述提到的一些经典图像复原算法。 - TensorFlow 或 PyTorch 可用来构建自定义的深度学习框架解决复杂的非线性问题如自然场景下的动态视频流实时雾等高级需求[^6]. ```python import cv2 import numpy as np def deblur_image(image_path, kernel_size=(5,5)): img = cv2.imread(image_path) blurred_img = cv2.GaussianBlur(img,kernel_size,cv2.BORDER_DEFAULT) # Example of Wiener Deconvolution using scipy from scipy.signal import wiener restored_img = wiener(blurred_img) return restored_img ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值