Такая ошибка может возникнуть в том случае, если пытаться сохранять в уже открытый файл. То есть ресурс «Test2.jpg» ранее был открыт и не освобождён.
Так что ищите в своём коде, где у вас ещё используется «Test2.jpg» (и не освобождается при этом).
У вас не используются Dispose
/using
. Покажу, как должен выглядеть правильный код. Заодно поправил нейминг.
static void Edit(string text)
{
using (var image = Image.FromFile("Test.jpg"))
using (var graphics = Graphics.FromImage(image))
using (var font = new Font("Xenia Font", 15, FontStyle.Bold))
using (var brush = new SolidBrush(Color.WhiteSmoke))
using (var stringFormat = new StringFormat())
{
graphics.DrawString(
text,
font,
brush,
new RectangleF(0, 0, 0, 340),
stringFormat
);
image.Save("Test2.jpg", ImageFormat.Jpeg);
}
}
Вообще, stringFormat
вполне можно убрать, т. к. ему не задаются параметры, отличные от дефолтных.
RectangleF
не является disposable
, поэтому его не нужно заключать в using
.
Также неясно, зачем метод сделан статическим.
Заблокирован |
||||
1 |
||||
23.03.2015, 11:55. Показов 36520. Ответов 19 Метки нет (Все метки)
помогите пожалуйста при сохранении битмапа возникает такая ошибка: «В GDI+ возникла ошибка общего вида.» делаю так:
0 |
kolorotur 17223 / 12675 / 3323 Регистрация: 17.09.2011 Сообщений: 20,949 |
||||
23.03.2015, 12:10 |
2 |
|||
Что находится в args[2]?
… Удалите эту часть — ошибка остается?
0 |
Заблокирован |
|
23.03.2015, 12:14 [ТС] |
3 |
Что находится в args[2]? корректно, просто строка типа «picture.bmp»
Удалите эту часть — ошибка остается? да
0 |
17223 / 12675 / 3323 Регистрация: 17.09.2011 Сообщений: 20,949 |
|
23.03.2015, 12:18 |
4 |
Сообщение было отмечено Rillaxac как решение Решение
да Попробуйте тогда сохранить изображение под другим именем, например «picture_copy.bmp».
1 |
Заблокирован |
|
23.03.2015, 12:26 [ТС] |
5 |
Попробуйте тогда сохранить изображение под другим именем, например «picture_copy.bmp». все уже и сам дошел, оказывается не нравится ему что я под тем же именем сохраняю… Добавлено через 4 минуты Добавлено через 1 минуту
0 |
kolorotur 17223 / 12675 / 3323 Регистрация: 17.09.2011 Сообщений: 20,949 |
||||
23.03.2015, 12:35 |
6 |
|||
может быть можно получить как то этот битмап в буфер, закрыть объект и сохранить буфер в файл? Конечно:
0 |
Заблокирован |
||||
23.03.2015, 12:37 [ТС] |
7 |
|||
Конечно: ну можно и так а то я уже по другому решил))0
0 |
17223 / 12675 / 3323 Регистрация: 17.09.2011 Сообщений: 20,949 |
|
23.03.2015, 13:04 |
8 |
а то я уже по другому решил Так памяти в два раза больше на каждое изображение используется
0 |
UAA1979 0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
||||
01.02.2017, 21:17 |
9 |
|||
Предыстория тут Теперь вот что у меня получается. Если изображение из базы, JPG Формата, то Выдает ошибку(смотрите вложение) а если .png то все работает. Вот код :
Миниатюры
0 |
0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
|
04.02.2017, 05:19 |
10 |
Никто не ответит?
0 |
Администратор 15635 / 12601 / 4993 Регистрация: 17.03.2014 Сообщений: 25,611 Записей в блоге: 1 |
|
04.02.2017, 07:48 |
11 |
UAA1979, посмотри есть ли вложенное исключение (InnerException) и если да, то что написано в нем. Для этого нажми на ссылку «View detail…» в окне исключения и VS покажет тебе полную информацию о исключении.
1 |
0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
|
09.02.2017, 01:37 |
12 |
Извините что так поздно отвечаю просто не заметил( Насчет ошибки я нажимаю показать детали но ничего нового не показывает: Миниатюры
0 |
Администратор 15635 / 12601 / 4993 Регистрация: 17.03.2014 Сообщений: 25,611 Записей в блоге: 1 |
|
09.02.2017, 16:14 |
13 |
UAA1979, раскрой исключение в окне View Detail и посмотри точно ли в InnerException ничего нет?
0 |
0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
|
09.02.2017, 19:04 |
14 |
И опять вы правы. Показывает нуль. Расскажу как бывает. Я выбираю из списка айтем. Он выбрасывает данные и изображение из базы на pictureBox. Я меняю данные но не изображение и хочу добавить как новый айтем. Вот тогда то и выходит эта ошибка. На pictureBox е по умолчанию стоит изображение и если нету изображения он добовляет эту. Но если из базы загрузить изображение то выходит эта ошибка. Миниатюры
0 |
0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
|
09.02.2017, 19:07 |
15 |
Да кстати если в базе pnq то нет проблем
0 |
Администратор 15635 / 12601 / 4993 Регистрация: 17.03.2014 Сообщений: 25,611 Записей в блоге: 1 |
|
09.02.2017, 19:23 |
16 |
UAA1979, я как раз таки надеялся что в InnerException что-то будет. Посмотри чему равен в этот момент vessel_pic.Image и vessel_pic.Image.RawFormat для png и jpeg. Может с ними что-то не так.
0 |
UAA1979 0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
||||
09.02.2017, 20:31 |
17 |
|||
А как посмотреть не подскажите? Как то можно вывести изображение в
?
0 |
Администратор 15635 / 12601 / 4993 Регистрация: 17.03.2014 Сообщений: 25,611 Записей в блоге: 1 |
|
09.02.2017, 20:44 |
18 |
UAA1979, запусти код под отладчиком
0 |
0 / 0 / 1 Регистрация: 31.10.2014 Сообщений: 45 |
|
14.02.2017, 22:45 |
19 |
Разобрался с отладчиком. Ничего не показывает просто на этом месте сценарий останавливается. Никакой ошибки ничего кроме то что выдает . 0 ошибок 0 предупреждений Где смотреть что передает в этот момент ума не приложу( Миниатюры
0 |
906 / 663 / 318 Регистрация: 23.10.2016 Сообщений: 1,543 |
|
15.02.2017, 13:48 |
20 |
UAA1979, кто ж в режиме Release дебажит!
0 |
Необработанное исключение типа «System.Runtime.InteropServices.ExternalException» произошло в System.Drawing.dll
Дополнительные сведения: В GDI+ возникла ошибка общего вида.
В кратце код такой:
using namespace System; using namespace System::Drawing;
void Form1::SaveNode(Image^ Img) {
MyClass^ newNode = gcnew MyClass();
IO::MemoryStream ^ConvImg = gcnew IO::MemoryStream(); Img->Save(ConvImg, Imaging::ImageFormat::Jpeg); newNode->Poster = ConvImg->ToArray(); // ЗДЕСЬ ВЫСКАКИВАЕТ ИСКЛ. }
newNode->Poster имеет тип «array <Byte>^» или «array <unsigned char>^» — я и так и так пробовал.
Img поступает в функцию прямо с PictureBox. Изображение формата JPEG.
Какие могут быть причины?
- Remove From My Forums
-
Общие обсуждения
-
Добрый день !
Развернут терминальный сервер на основе Server 2012 Standard. (установлены все обновления) Опубликованы приложения и используются.
На днях сам по себе перестал функционировать web доступ. А именно https://х.х.х.х/RDWeb/ — отображается страница аутентификации, после ввода логина и пароля выводится сообщение на странице со следующей ошибкой: (Проводились попытки отремонтировать
но пока безуспешны они были) Заранее благодарен за помощь.(Также при создании коллекции выводится информация что произошел сбой, при этом коллекция создается и работает в дальнейшем.)
———————————————————————————————————————————————————
Ошибка сервера в приложении ‘/RDWeb/Pages’.
В GDI+ возникла ошибка общего вида.
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека для получения дополнительных сведений о данной ошибке и о вызвавшем ее фрагменте кода.Сведения об исключении: System.Runtime.InteropServices.ExternalException: В GDI+ возникла ошибка общего вида.
Ошибка источника:
Код ресурса, сгенерировавший это необработанное исключение, может быть отображен только после компиляции в режиме отладки. Для этого выполните одно из указанных ниже действий, а затем перейдите по следующему URL-адресу:
1. Добавьте директиву «Debug=true» в начало файла, сгенерировавшего ошибку. Пример:
<%@ Page Language=»C#» Debug=»true» %>
или:
2) Добавьте следующий раздел в файл конфигурации приложения:
<configuration>
<system.web>
<compilation debug=»true»/>
</system.web>
</configuration>Следует учесть, что во втором случае в режиме отладки будут скомпилированы все файлы приложения. Первый метод позволяет скомпилировать в режиме отладки только определенный файл.
Важное замечание. При выполнении приложений в режиме отладки падает производительность и увеличивается расход памяти. Прежде чем развертывать приложение как часть основного сценария, убедитесь в том, что режим
отладки для приложения отключен.Трассировка стека:
[ExternalException (0x80004005): В GDI+ возникла ошибка общего вида.]
System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) +813449
Microsoft.TerminalServices.Publishing.Portal.IconInfo.MakeIconImage(Byte[] icon_contents, Int32 height, Int32 width, ImageFormat format) +194
Microsoft.TerminalServices.Publishing.Portal.IconInfo.MakeImage(ImageFormat imageFormat, Int32 imageDimension) +56
Microsoft.TerminalServices.Publishing.Portal.IconInfo.MakeImages(ImageFormat imageFormat, Int32[] imageDimensions) +64
Microsoft.TerminalServices.Publishing.Portal.CPubAppIconFactory..cctor() +202[TypeInitializationException: Инициализатор типа «Microsoft.TerminalServices.Publishing.Portal.CPubAppIconFactory» выдал исключение.]
Microsoft.TerminalServices.Publishing.Portal.CPubAppIconFactory..ctor(Int64 cacheExpirationTimeInMinutes) +27
Microsoft.TerminalServices.Publishing.Portal.RWSCPUBAccessor..ctor(String tsName, Boolean PollAppFreshness) +986
Microsoft.TerminalServices.Publishing.Portal.RWSCPubAndTsAccessor.GetWorkspaceInfo() +82
Microsoft.TerminalServices.Publishing.Portal.RapWebService.GetWorkspaceInfo() +53
Microsoft.TerminalServices.Publishing.Portal.WebFeed.GetDataForFeed(String userSid, String folderName, Dictionary`2& resource_list, Dictionary`2& ts_list, List`1& folders) +369
Microsoft.TerminalServices.Publishing.Portal.WebFeed.GenerateFeed(String userSid, FeedXmlVersion xmlVersion, String folderPath, Boolean writeXmlDecl) +354
ASP.ru_ru_default_aspx.Page_PreInit(Object sender, EventArgs e) +1805
System.Web.UI.Page.PerformPreInit() +49
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1844Информация о версии: Платформа Microsoft .NET Framework, версия:4.0.30319; ASP.NET, версия:4.0.30319.18045
-
Изменен тип
10 июля 2013 г. 6:42
Нет действий
-
Изменен тип
I’ve got a global Graphics object created from a Panel. At regular intervals an image is picked up from the disk and drawn into the panel using Graphics.DrawImage(). It works fine for a few iterations and then I’m getting the following helpful exception:
System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Graphics.CheckErrorStatus(Int32 status)
at System.Drawing.Graphics.DrawImage(Image image, Int32 x, Int32 y)
at System.Drawing.Graphics.DrawImage(Image image, Point point)
I ruled out memory leaks as I dispose of the image object when I’m done with it. I know that the images are not corrupted and can be read fine as the program executes fine for a while before the panel stops showing.
I ran into the same problem when using a PictureBox but this time at least I got an error instead of nothing.
I checked the GDI objects and USER objects in the Task Manager but they’re always around 65 user objects and 165 GDI objects when the app works and when it doesn’t.
I do need to get to the bottom of this as soon as and it’s not like I can stick breakpoints in .NET System libraries and see where exactly execution fails.
Thanks in advance.
EDIT: This is the display code:
private void DrawImage(Image image)
{
Point leftCorner = new Point((this.Bounds.Width / 2) - (image.Width / 2), (this.Bounds.Height / 2) - (image.Height / 2));
_graphics.DrawImage(image, leftCorner);
}
the image load code:
private void LoadImage(string filename, ref Image image)
{
MemoryStream memoryStream = DecryptImageBinary(Settings.Default.ImagePath + filename, _cryptPassword);
image = Image.FromStream(memoryStream);
memoryStream.Close();
memoryStream.Dispose();
memoryStream = null;
}
_image is global and its reference is updated in LoadImage. They are passed as parameters as I want to change the global references from as few places as possible only and keep the other methods self contained. _graphics is also global.
I’ve also got a webBrowser control for web sites and I either show an image or a website at one time. when there’s time to display an image, the following code executes:
webBrowser.Visible = false;
panel.Visible = true;
DrawImage(_image)
_image.Dispose();
_image = null;
_image is referencing a pre-loaded image.
Hope this helps.