Мне нужно сделать изображение с холста и из Интернета Я нахожу этот код, который отлично работает. Делает образ и хорошо. Но теперь мне нужно добавить текст в это новое изображение, и я думаю, что это проблема. Иногда работает, иногда бросает мне это исключение. Как закрыть изображение и снова изменить изображение. Или как я могу изменить изображение без исключения.Как закрыть файл изображения с помощью FileStream
int width = (int)(SystemParameters.PrimaryScreenWidth * 0.75);
int height = (int)canvas.Height;
RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
width, (int)canvas.Height, 96d, 96d, PixelFormats.Pbgra32);
// needed otherwise the image output is black
canvas.Measure(new System.Windows.Size(width, height));
canvas.Arrange(new Rect(new System.Windows.Size(width, height)));
renderBitmap.Render(canvas);
//JpegBitmapEncoder encoder = new JpegBitmapEncoder();
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
using (FileStream file = File.Create(filename))
{
encoder.Save(file);
}
Это то, что у меня есть исключение:
Процесс не может получить доступ к файлу «image.png», так как он используется другим процессом.
Я стараюсь с file.Close()
, я стараюсь не file.Close()
filename
это путь к файлу изображения, которые создают и затем используется и попытаться удалить
Вот и мой код Этот код выполняется 1 раз в секунду.
private void CreateSaveBitmap(Canvas canvas, string filename, string sensor)
{
int width = (int)(SystemParameters.PrimaryScreenWidth * 0.75);
int height = (int)canvas.Height;
RenderTargetBitmap renderBitmap = new RenderTargetBitmap(
width, (int)canvas.Height,
96d, 96d, PixelFormats.Pbgra32);
// needed otherwise the image output is black
canvas.Measure(new System.Windows.Size(width, height));
canvas.Arrange(new Rect(new System.Windows.Size(width, height)));
renderBitmap.Render(canvas);
//JpegBitmapEncoder encoder = new JpegBitmapEncoder();
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
using (FileStream file = File.Create(filename))
{
encoder.Save(file);
file.Close();
}
string head = SetHeadForPrintImage(sensor);
Bitmap bmp = new Bitmap(filename);
Graphics g = Graphics.FromImage(bmp);
g.DrawString(head, new System.Drawing.Font("Tahoma", 12f, System.Drawing.FontStyle.Regular), System.Drawing.Brushes.Black, new PointF(200, 0));
bmp.SetResolution(300, 300);
File.Delete(filename); // throw me exception
File.Delete(@".\Print\" + sensor + ".jpg");
bmp.Save(@".\Print\" + sensor + ".jpg");
}
Закрытие файла, не закрывается сразу, поэтому попробуйте добавить Sleep, чтобы дождаться его закрытия. Но я думаю, что вам не нужно будет преобразовать renderBitmap в Bitmap, не сохраняя его в файл. – AntiHeadshot
Вы уверены, что изображение не открывается в программе просмотра, когда вы получаете исключение? Кроме того, отключите антивирус – owairc
@AntiHeadshot со сном снова выбрасывает меня исключение – somePeaple