我不得不修復一些使用Memory Stream將Base64字符串轉換爲圖像的非常舊的代碼中的錯誤。基本上,它循環遍歷一系列存儲爲base64字符串的圖像,並將它們轉換爲圖像,然後使用ActiveReports繪製它們。System.Drawing.Image.FromStream的這種用法可以指向相同的內存嗎?
這個錯誤是,一旦它加載一個圖像,所有下面的圖像將是第一個圖像的副本。
我發現正在做字符串轉換爲圖像的代碼,並立即注意到它沒有處理內存流。如果我在使用塊中包裝內存流,我會得到一個GDI異常。我猜這是因爲圖像還沒有真正從內存中讀取,但我想聽聽有沒有人猜測。提前致謝!
byte[] oGraphic = null;
try
{
oGraphic = Convert.FromBase64String(psGraphic);
DataDynamics.ActiveReports.Picture oImg = new Picture();
oImg.Top = this.Legend.Top + this.fTopFirst;
oImg.Visible = true;
oImg.Name = sLabelName;
oImg.PictureAlignment = PictureAlignment.Center;
oImg.Image = null;
if (oGraphic != null)
{
var oStream = new MemoryStream(oGraphic);
oImg.Image = System.Drawing.Image.FromStream(oStream);
oImg.Height = Convert.ToSingle(oImg.Image.Height)/(oImg.Image.VerticalResolution);
oImg.Width = Convert.ToSingle(oImg.Image.Width)/(oImg.Image.HorizontalResolution);
oImg.SizeMode = SizeModes.Zoom;
this.fGraphicHeight = oImg.Height;
this.fGraphicWidth = oImg.Width;
if (this.fConstantGraphic > this.fGraphicWidth)
oImg.Left = this.Legend.Left + this.fLeftFirst +
((this.fConstantGraphic - this.fGraphicWidth)/2);
else
oImg.Left = this.Legend.Left + this.fLeftFirst;
}
else
{
this.fGraphicHeight = 0f;
this.fGraphicWidth = 0f;
}
this.GHMap.Controls.Add(oImg);
}
catch (Exception oE)
{
.....
}
我添加了oGraphic變量的聲明,幾乎所有的東西都在那裏。 – NullReference
@NullReference oGraphic後綴會發生什麼?我現在正在抓秸稈。 – Tergiver
oGraphic是一個局部變量,在它用於這裏後,新的MemoryStream(oGraphic);它不再被使用。 – NullReference