2011-01-19 132 views
2

我有一個要求,以創建一個圖像與300DPI,但在圖像的組成,像添加資源(字體,圖像),我越來越內存異常。內存異常雖然300dpi圖片

using (Bitmap pg = new Bitmap(GetPixelsFromInches(float.Parse(pageWidth), dpi, actualDpi), GetPixelsFromInches(float.Parse(pageHeight), dpi, actualDpi))) 
{ 
    pg.SetResolution(float.Parse(dpi), float.Parse(dpi)); 

    Graphics gr = Graphics.FromImage(pg); 
    gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 

    System.Drawing.Rectangle pgRect = new System.Drawing.Rectangle(0, 0, pg.Width, pg.Height); 
    SolidBrush solidWhite = new SolidBrush(Color.White); 
    gr.FillRectangle(solidWhite, pgRect); 


    currentPageDisplayed = xNode.Attributes["id"].Value; 

    foreach (XmlElement xElement in xNode) 
    { 
     //Here I am writing each elements, like texts or images. 
     DrawImageForElements(xElement, , dpi, actualDpi); 

    } 


    MemoryStream myMemoryStream = new MemoryStream(); 
    //pg.Save(myMemoryStream, System.Drawing.Imaging.ImageFormat.Bmp); 
    String [email protected]"c:\images\" + currentPageDisplayed + "+.png"; 
    pg.Save(filename, System.Drawing.Imaging.ImageFormat.Png); 



    myMemoryStream.Dispose(); 
    gr.Dispose(); 
    pg.Dispose(); 
} 

請建議是否有其他更好的選擇!

+1

如何在電腦上粘貼一些額外的內存? – grenade 2011-01-19 06:21:57

+0

我在圖像中有很多元素,因爲它不斷繪製圖像尺寸在內存中的增長,例如:當我繪製尺寸爲300DPI的圖像時,尺寸爲11x15英尺。它真的很大。我想知道是否有其他的選擇,我可以保存在文件中,並寫上它? – Rafeeq 2011-01-19 06:29:50

回答

1

我看到這裏有兩個基本選項。

  1. 獲得更廣泛的體系結構。您可能需要在具有充足交換空間的x64機器上執行此操作。這些尺寸的24位像素映射將佔用300×300×12×12×11×15×3 = 6,415,200,000個字節的內存,這在x64機器中是合理的,但是大於x86可以支持的虛擬內存空間的地址。

  2. 綁紮或平鋪。創建一系列更小的像素圖,一次一個,每個對應於圖像的某個子部分並渲染該部分。 (條帶意味着從圖像的一邊到另一邊的條紋,同時沿兩個方向平鋪)。但我不完全確定如何在給定System.Drawing.**工具箱中的工具的情況下將這些部分拼接在一起。