2013-03-21 81 views
2

我看到位圖標題中有一個區域存儲附加信息。因此,如果我要用C#編寫圖像,是否可以在標題中添加額外的ASCII信息?如何在位圖標題中存儲ASCII信息?

public void writeToPath(GMapControl form) 
{ 
    if(path == String.Empty || path == null) 
     path=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 

    int width = form.Size.Width; 
    int height = form.Size.Height; 

    Bitmap bm = new Bitmap(width, height); 
    form.DrawToBitmap(bm, new Rectangle(0, 0, width, height)); 

    bm.Save("C:\SomePath\blah"); 

} 

enter image description here

+0

在本規範中,您看到「附加信息」字段?而且很可能你無法使用'Bitmap'類來做你想做的事情,因爲我相信這並不是爲了逐字節地編輯位圖文件。相反,您可能需要打開位圖文件並直接操作它。 我可以問*爲什麼*你想插入數據到位圖的頭部?這聽起來像你試圖實現的任何東西都可以通過其他解決方案更好地實現。 – qJake 2013-03-21 19:26:50

+0

@SpikeX請參閱http://en.wikipedia.org/wiki/BMP_file_format頁面。什麼是'更好'的解決方案。我想創建一個位圖,我的應用程序知道它創建它。這樣我就可以重新掃描一個充滿圖片的目錄,知道我的應用程序是這樣做的,因此我只能掃描那些圖片。 – stackoverflow 2013-03-21 19:27:57

+0

好的,具體來說,您是否希望插入數據?什麼字節偏移?多少數據? – qJake 2013-03-21 19:29:17

回答

0

我相信去了解這一點沒有鑽研的BITMAPINFOHEADER業務的最簡單的方法是簡單地再次打開該文件並編輯你以後特定字節。

這裏的一些(未經測試)代碼:

using (var stream = File.Open(@"C:\SomePath\blah.jpg", FileMode.Open)) 
{ 
    var myBytes = new byte[] { /* put up to 4 bytes here */ }; 

    stream.Position = 6; //there is some space at 0x006 and 0x0008 for your data 
    stream.Write(myBytes, 0, myBytes.Length); 
} 
0

你可以通過你的元數據的大小增加文件偏移像素陣列。然後,將數據放在像素數組之前。但是,您需要擁有自己的bmp io例程來編寫和檢索額外的數據塊。