日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Awesomium(二)-- MultiThreadSnapshot

發(fā)布時(shí)間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Awesomium(二)-- MultiThreadSnapshot 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、 介紹

延續(xù)上一篇針對Awesomium的試用感受,感覺還是挺不錯(cuò)的,覺得網(wǎng)頁抓圖功能效果很好,今后具有一定重用性,因此特地進(jìn)行了封裝,讓它支持多線程并發(fā)截圖。

?????? 以Helper的形式進(jìn)行了封裝,封裝類是WebSnapshot,由于內(nèi)部的WebCore對象是一個(gè)重對象,因此將其做成了單件形式。下面是封裝暴露的接口:

delegate void FinishSnapshot(Bitmap bmp)void BeginSave(string url, string savePath, FinishSnapshot finishCallback)Bitmap Save(string url, string savePath)

看看接口名,顧名思義分為同步和異步兩種抓圖方法。

參數(shù)說明:url是需要抓圖的網(wǎng)站地址;savePath是抓圖后保存的文件路徑(當(dāng)設(shè)置為null時(shí)則不進(jìn)行保存);finishCallback是異步抓圖完成后的回調(diào);如果需要對圖片進(jìn)行后期調(diào)整及后期保存,可以使用同步方法中的返回值或者異步方法中的回調(diào),然后將savePath設(shè)置為null,即可。

二、 使用方法說明

1. 編譯時(shí)依賴的類庫為AwesomiumDotNet.dll(Version 1.2.1);運(yùn)行時(shí)依賴的類庫為Awesomium.dll(Version 1.5.1)和icudt38.dll(使用VS的BuildEvents功能將Runtime類庫復(fù)制到程序當(dāng)前目錄下)

2. 調(diào)用例子:

自動保存圖片

WebSnapshot.Instance.BeginSave("http://www.sina.com.cn", @"c:\sina.bmp", (bmp) => { Console.WriteLine("sina finish!"); });

手動保存圖片

WebSnapshot.Instance.BeginSave("http://www.microsoft.com", null, (bmp) => {Console.WriteLine("ms finish!");bmp.Save(@"c:\ms.bmp"); });

三、 類庫封裝細(xì)節(jié)說明

1. WebCore.Update()

由于WebCore為重量級對象,WebView則相對輕量級,而且是在多線程環(huán)境下執(zhí)行,因此選擇使用單件模式避免WebCore反復(fù)被構(gòu)造。WebView是從WebCore創(chuàng)建的,Update()方法用來更新所有WebView加載頁面的當(dāng)前狀態(tài),用來觸發(fā)WebView的事件。防止多線程資源訪問沖突,Update()方法需要lock。

2. WebView.Resize()

原理就是將WebView的尺寸調(diào)整為和頁面同樣大小,這樣截圖就能更完整,不管多長的頁面都可以在一張圖片中完整的保存。這里還使用到了WebView.ExecuteJavaScriptWithResult()方法,通過javascript獲得當(dāng)前頁面的實(shí)際長寬,然后再調(diào)整WebView的Size,最后RenderToBitmap()。

3. WebCoreOptions

在構(gòu)造WebCore的時(shí)候需要傳遞WebCoreOptions,顧名思義就是設(shè)置WebCore參數(shù)。其中比較實(shí)用的就是LogLevel和LogPath兩個(gè)屬性,用來控制瀏覽器內(nèi)核的日志輸出。

public enum LogLevel {None = 0, // No log is createdNormal = 1, // Logs only errorsVerbose = 2, // Logs everything }

四、代碼

Snapshot.7z

轉(zhuǎn)載于:https://www.cnblogs.com/canmusic/archive/2012/10/09/2717465.html

總結(jié)

以上是生活随笔為你收集整理的Awesomium(二)-- MultiThreadSnapshot的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。