binaryoffset Ответов: 2

Копировать сохранить растровое изображение в файл C++


Привет. Я пытаюсь скопировать и сохранить содержимое изображения класса Bitmap в файл*. bmp, но в настоящее время получаю необработанные исключения во время выполнения консольной программы. Я был бы благодарен, если бы узнал, в чем заключается ошибка и как исправить эту программу. Спасибо.

Ниже приведена основная часть кода в основной программе:

Bitmap^ imageTest;
String^ path = "C:\\ImageScan.bmp";
imageTest = gcnew Bitmap(path, true); // Actual image to be copied.

Bitmap^ imageTestCopy;
String^ path2 = "C:\\BrainScanCopy2.bmp"; //'blank canvas' identical to imageTest
imageTestCopy = gcnew Bitmap(path2, true);


int x = 0;
int y = 0;

for (x = 0; x < imageTest->Width; x++) // Loop through the image pixels
{
	for (y = 0; y < imageTest->Height; y++)
	{
	        Color pixelColor = imageTest->GetPixel(x, y);
		imageTestCopy->SetPixel(x, y, pixelColor);
	}
}

imageTestCopy->Save("c:\\BrainScanCopy3.bmp"); //save image to new file


Что я уже пробовал:

Я попытался изменить путь и использовать "imageTestCopy2.bmp" вместо "imageTestCopy3.bmp" при попытке сохранить изображение в файл.

Richard MacCutchan

Где вы получаете исключения и какие они бывают?

binaryoffset

Исключение составляло:


Необработанное исключение типа ' System. Runtime.InteropServices.ExternalException ' произошло в системе.Рисование.дополнительная информация файлов: общая ошибка в GDI+.

binaryoffset

Но я изменил путь с "c:\\ImageScanCopy3.bmp" в другую папку (которая находится внутри C:\\), и теперь она работает.

Afzaal Ahmad Zeeshan

Что это за неожиданное исключение, которое вы получаете?

2 Ответов

Рейтинг:
1

Afzaal Ahmad Zeeshan

Это общее исключение-худшее исключение, которое можно получить при работе с графическими объектами. Он просто ничего не дает.

Цитата:
Необработанное исключение типа ' System. Runtime.InteropServices.ExternalException ' произошло в системе.Рисование.дополнительная информация файлов: общая ошибка в GDI+.

Даже если вы попытаетесь получить ErrorCode это вообще ничего не даст. Во-вторых, главное понять, что как только вы загружаете графику (растровое изображение), на этот файл ставится блокировка, которая не позволяет обновлять или изменять файл. Этот решение Ханса проходе[^] дает хороший обзор использования блока using для обеспечения правильного расположения предыдущих растровых изображений; вы можете написать try...catch альтернатива этой программе C# для выполнения этого в вашем приложении C++.

Для большего, Исключение Externalexception Класса (Система.Во время выполнения.InteropServices)[^]


Рейтинг:
0

KarstenK

Вы не уважаете формат файлов bmp. В начале пишется растровый заголовок, чем необязательна некоторая палитра (отображение) данных и чем пиксели. Вы легко можете получить некоторую информацию в статья Википедии о формате файла bmp.

Легендарная статья CxImage обрабатывает растровое изображение и некоторые другие графические форматы в выдающемся качестве.