2016-04-14 54 views
1
public static void ScreenShotAndSave(driver, string FileName) 
{ 
     string userPath = "thePath//image.bmp" 
     Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot(); 
     ss.SaveAsFile(userPath, ImageFormat.Bmp); 
} 

我使用上面的代碼捕獲在任何瀏覽器的屏幕截圖。我使用捕獲的圖像作爲源。我在bmp Format24bppRgb中保存了一個模板圖像。您會注意到,aForge只會比較24或8個bpp圖像。但是,當通過IE運行測試時,文件將保存在Format32bppArgb中,並且不能在aForge中使用。我很樂意聽到您對我的問題提出的建議。請隨時問我更多的問題。 在此先感謝。屏幕截圖由硒C#,Internet Explorer與Chrome使用aForge,

+0

你用什麼庫? – 2016-04-14 20:53:25

+1

@sara我正在使用System.Drawing.Imaging和OpenQA.Selenium –

回答

1

我用這個功能來刪除與硒的alpha通道:

public static Bitmap RemoveAlphaChannel(Bitmap bitmapSrc) { 
    Rectangle rect = new Rectangle(0, 0, bitmapSrc.Width, bitmapSrc.Height); 
    Bitmap bitmapDest = (Bitmap)new Bitmap(bitmapSrc.Width, bitmapSrc.Height, PixelFormat.Format24bppRgb); 
    BitmapData dataSrc = bitmapSrc.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); 
    BitmapData dataDest = bitmapDest.LockBits(rect, ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); 
    NativeMethods.CopyMemory(dataDest.Scan0, dataSrc.Scan0, (uint)dataSrc.Stride * (uint)dataSrc.Height); 
    bitmapSrc.UnlockBits(dataSrc); 
    bitmapDest.UnlockBits(dataDest); 
    return bitmapDest; 
} 

static class NativeMethods { 

    const string KERNEL32 = "Kernel32.dll"; 

    [DllImport(KERNEL32)] 
    public extern static void CopyMemory(IntPtr dest, IntPtr src, uint length); 

} 

這是硒的使用例子:

var screenshot = driver.GetScreenshot(); 
using(var img = (Bitmap)Bitmap.FromStream(new MemoryStream(screenshot.AsByteArray), false, false)){ 
    RemoveAlphaChannel(img).Save("abcd.png", ImageFormat.Png); 
} 
+0

謝謝,它只是解決了我的問題。只要我達到15的聲望,我會選擇這個作爲最好的答案! –