目前我正在使用Control
DrawToBitmap
方法捕获我的WebBrowser,如下所示。
var bmp = new Bitmap(640,480, PixelFormat::Format32bppArgb)
var web = (System.Windows.Forms.Control)sender;
web.DrawToBitmap(bmp, Rectangle(0, 0, 640,480));
我的Bitmap
支持Alpha频道,但此代码不会保存透明度。
以下是网页示例: http://jsfiddle.net/zPtPN/
答案 0 :(得分:1)
编辑2:嵌入式浏览器的不透明度
使用CEF
(来自Google的Chromium Embedded Framework),您应该执行以下操作。这可能适用于或不适用于默认的.NET Internet Explorer控件。
body
{
background-color: transparent;
}
要覆盖它,您必须渲染到已清除的缓冲区。缓冲区不是最终渲染的栅格,而是一个中间内存缓冲区,它保留了非常多的alpha通道。只要清除缓冲区(用透明像素填充),就可以使用完整的ARGB32通道获取缓冲区并正确覆盖它,你应该得到你想要的。
最好的是,您尽可能地尝试,然后截取屏幕截图并发布一个新问题,指明您使用的是嵌入式浏览器。同时指定浏览器版本,因为它将从一台计算机更改为另一台计算机:Options for embedding Chromium instead of IE WebBrowser control with WPF/C#
Bitmap
可能包含Alpha通道信息,但并非所有文件格式都支持它。您应将图像保存为*.PNG
ARGB32
无损模式。一个简单的*.BMP
文件是不够的。
看看这个答案,不仅知道如何保存为PNG,还知道如何实现透明度:
c# Bitmap.Save transparancy doesn't save in png
要从网页获取透明度,您可以尝试使用 UGLY , CUMBERSOME , HORRIBLE 技术,这些技术存在大量问题:
为身体背景使用独特的颜色,例如
#ffe000
。渲染页面,像以前一样抓住它。
透明部分将显示身体的背景。
此时,您可以通过将TransparencyKey设置为背景颜色 -OR - 来过滤图像,方法是用完全透明的像素替换该颜色的所有像素颜色(只需将Alpha通道的值从255更改为0)。
为什么这太可怕了?因为结果会很难看:
border-radius
或box-shadow
这样漂亮的CSS3内容,会出现与上面相同的瑕疵:带阴影的边框像素(抗锯齿)看起来很糟糕。丑陋的Example here。
那你怎么能删除这些文物呢?你不能。 我强烈建议您采用完全不同的方法解决问题。
顺便问一下,你想要达到什么目的?您是否正在使用CEF
或其他嵌入式浏览器技术以某种方式覆盖?
也许还有其他方法可以帮助你......
编辑:为什么ffff
<div>
没有显示
您将样式设置为:
background-color: transparent; opacity:0;
现在,<div>
的背景将是透明的,并显示背后的内容(<body>
的{{1}})。当您设置background-color
时,您会说整个opacity
(包含的图片和文字)都是透明的。将其设置为<div>
意味着完全不可见。