2014-02-25 66 views
3

圖像文件大小的圖像大小爲2.5MB左右檢查以字節爲單位

此代碼給我合適的尺寸:

var fileLength = new FileInfo(path).Length; 

此代碼給我約600KB

Image image= Image.FromFile(path); 
byte[] imageByte = imageToByteArray(image); 
long legnth= imageByte.Length; 

public static byte[] imageToByteArray(System.Drawing.Image imageIn) 
{ 
    MemoryStream ms = new MemoryStream(); 
    imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
    return ms.ToArray(); 
} 

什麼我錯過了嗎?

的問題是,我recive在圖像中的字節[]所以..

+3

什麼的'imageToByteArray'嗎? – dkozl

+1

我相信問題在於你的'igameToByteArray'實現 –

+2

文件通常包含壓縮格式的圖像(讓它爲RLE或JPEG),而內存中的圖像是未壓縮的位圖(簡稱像素數組)。 –

回答

2
var fileLength = new FileInfo(path).Length; 

是類似於:

byte[] buffer = System.IO.File.ReadAllBytes(@"yourimage.ext"); 
int size = buffer.Length; 

System.Drawing.Image對象保留原始未壓縮的位圖。當您撥打imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png)時,位圖會採用不同的圖像/壓縮算法或相同的算法但不同的選項進行壓縮,這就是爲什麼您的圖像大小有所不同。

0

檢查您的字節數組的Length是正確的,問題是,作爲@Kuba Wyrostek提到的,是你最有可能改變文件的格式,從鬆散的未壓縮的位圖的PNG和然後檢查大小,這將返回一個不同的值。

你可以依靠最值得信賴的價值將是

var fileLength = new FileInfo(path).Length; 
1

此代碼工作正常..

//your filePath ex: /document/mypersonal/ram.png 
var fileLength = new FileInfo (FilePath).Length; 
public static string GetFileSize(fileLength) 
{ 
    string[] sizes = { "B", "KB", "MB", "GB" }; 
    int order = 0; 
    while (fileLength >= 1024 && order + 1 < sizes.Length) { 
     order++; 
     fileLength = fileLength/1024; 
    } 
    string result = String.Format("{0:0.##} {1}", fileLength, sizes[order]); 
    return result; 
} 
相關問題