Мне нужно исправить ошибку в каком-то очень старом коде, который преобразует строку Base64 в изображение с помощью потока памяти. По сути, он перебирает список изображений, хранящихся в виде строк base64, и преобразует их в изображения, а затем рисует их с помощью ActiveReports.
Ошибка в том, что после загрузки одного изображения все последующие изображения будут копиями первого изображения.
Я нашел код, который выполняет преобразование строки в изображение, и сразу заметил, что он не избавляется от потока памяти. Если я оборачиваю поток памяти в используемый блок, я получаю исключение 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)
{
.....
}