У меня есть таблица, которая содержит ~ 50 записей и 50 изображений.В отчете я создал изображение заполнителя.Каждая запись имеет уникальное изображение.
После того, как я получил исключение "переполнение памяти", я решил изменить размеры изображений перед добавлением в отчет.
Теперь все работает нормально, за исключением загрузки отчетов.время ~ 20-25 секВ будущем в этой таблице будет ~ 5000-10000 записей.
Вот мой код, который я использовал:1. Main.cs - событие клика на ToolStripMenuItem:
LoadImage(ds1.Tables[0].Rows[i], "imageUrlFoto", foldernameFoto + ds1.Tables[0].Rows[i]["FotoName"]);
Main.cs - LoadImages:
private void LoadImage(DataRow objDataRow, string strImageField, string FilePath)
{
try
{
FileStream fs = new FileStream(FilePath,
System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] Image = new byte[fs.Length];
fs.Read(Image, 0, Convert.ToInt32(fs.Length));
fs.Close();
objDataRow[strImageField] = utils.Settings.CreateThumbnail(Image,new Size(200,200));
}
catch (Exception ex)
{
MessageBox.Show("ERROR: "+ex.Message);
}
}
Utils.cs CreateThumbnail:
public static byte[] CreateThumbnail(byte[] PassedImage, Size size)
{
byte[] ReturnedThumbnail;
using (MemoryStream StartMemoryStream = new MemoryStream(),
NewMemoryStream = new MemoryStream())
{
StartMemoryStream.Write(PassedImage, 0, PassedImage.Length);
Bitmap startBitmap = new Bitmap(StartMemoryStream);
int newHeight;
int newWidth;
double HW_ratio;
int sourceWidth = startBitmap.Width;
int sourceHeight = startBitmap.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width / (float)sourceWidth);
nPercentH = ((float)size.Height / (float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap newBitmap = new Bitmap(destWidth, destHeight);
newBitmap = ResizeImage(startBitmap, destWidth, destHeight);
newBitmap.Save(NewMemoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
ReturnedThumbnail = NewMemoryStream.ToArray();
}
return ReturnedThumbnail;
}
Utils.cs Размер растрового изображения:
private static Bitmap ResizeImage(Bitmap image, int width, int height)
{
Bitmap resizedImage = new Bitmap(width, height);
using (Graphics gfx = Graphics.FromImage(resizedImage))
{
gfx.DrawImage(image, new Rectangle(0, 0, width, height),
new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel);
}
return resizedImage;
}
Заранее спасибо