2013-05-29 33 views
0

當從WebBrowser的DrawToBitmap()函數生成位圖時,在使用兩個相同大小的圖像時,爲什麼在某些情況下將位圖轉換爲字節數組時,您是否有不同大小的數組? 我使用的功能:相同大小位圖產生字節數組

public static byte[] ImageToByte(Image img) 
{ 
    ImageConverter converter = new ImageConverter(); 
    return (byte[])converter.ConvertTo(img, typeof(byte[])); 
} 

從這裏有一個與我用的是圖像的問題。他們是不同的,我使用快照http://www.google.comhttp://www.google.co.uk。它們都生成大小爲{Width = 833 Height = 500}的圖像。但是,字節數組的大小分別是20072和24368。

任何想法?

謝謝!

編輯

讓我補充一些更多的信息。圖像變成BMP。我會附加一些更多的C#給你,讓大家更加了解。

public void captureSnapshot(string url) 
{ 
    this.url = url; 
    var thr = new Thread(() => 
    { 
     browser = new WebBrowser(); 
     browser.DocumentCompleted += snapshotEventCompleted; 
     browser.Navigate(url); 
     Application.Run(); 
    }); 

    thr.SetApartmentState(ApartmentState.STA); 
    thr.Start(); 
} 

public void snapshotEventCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    int pageHeight = browser.Document.Body.ScrollRectangle.Height; 
    int pageWidth = browser.Document.Body.ScrollRectangle.Width; 
    snapshot = new Bitmap(pageWidth, pageHeight); 
    browser.Size = new Size(pageWidth, pageHeight); 
    browser.ScrollBarsEnabled = false; 
    browser.DrawToBitmap(snapshot, new Rectangle(browser.Location.X, browser.Location.Y, pageWidth, pageHeight)); 
} 

解決:

因此,原來的功能DrawToBitmap不支持。 womp

+0

這是一個問題嗎?你知道圖像的格式(BMP/PNG/JPG)嗎?如果圖像被壓縮,那麼它可能會產生不同的尺寸... – mortb

+0

不知道你在想什麼。你問爲什麼google.com和google.co.uk上的圖片不同?他們是不同的,因爲有人讓他們不同。 – Dialecticus

+0

我會擔心,如果你有*一個*文件並將其轉換爲兩個字節數組,將它們兩個都轉換回來,並且這兩個圖像是不同的...... – mortb

回答

2

這是因爲一種叫Stride請看看這篇文章:包含的視頻幀具有相同尺寸可以有 兩個不同的進步Image Stride

enter image description here

兩個緩衝區。如果您處理視頻圖像,則必須考慮到步幅 。

+0

我不認爲這是原因。兩幅圖像都是以相同的方式製作的,所以沒有理由不同步。 –

+0

我讀過你的答案,當我們有不同的編解碼器時,它是完全正確的,但正如我在我的回答中提到的,來自同一視頻的幀可以有不同的步幅,儘管它們以相同的方式製作!我想說的是,製作這些圖像的方式並不是「大步」的唯一因素 – Mehran

3

它取決於用於保存圖像的編解碼器。例如,如果是PNG或JPG格式,那麼對於相同大小的圖像,壓縮可能會產生不同大小的輸出。這是因爲大的統一區域比具有許多細節的區域更有效地被壓縮。

相關問題