Преобразовать файл png в файл pcx, используя C#

Я пытаюсь преобразовать .png подать в .pcx файл. Сценарий следующий:

Я использую принтер этикеток TSC TTP-343C. На этикетках я должен печатать изображения. TSC предоставляет библиотеку документации для разработчиков. Поскольку я могу печатать изображения на этих этикетках только с использованием файлов pcx, мне необходимо преобразовать все изображения в изображения pcx. Любой другой формат или даже неправильный формат pcx (например, если пользователь только что переименовал окончание файла) не будет напечатан на этикетке.

Я видел этот пост, ссылающийся на Magick библиотека. В этом посте OP пытается преобразовать файл bmp в файл pcx, что не совсем то, чего я пытаюсь достичь. Я посмотрел на Magick документация по конвертации изображений. Я пытался конвертировать изображения как:

using (MagickImage img = new MagickImage(png)) // png is a string containing the path of the .png file
{
    img.Format = MagickFormat.Pcx;
    img.Write(pcx); // pcx is a string containing the path of the new .pcx file
}

К сожалению, это не правильно сохраняет изображение. Принтер этикеток все еще не может распечатать изображение на этикетке. Я попытался распечатать правильный файл pcx, и это работало нормально. Так что я думаю, единственная причина, по которой он все еще не работает, заключается в том, что преобразованный файл не является настоящим файлом pcx.

Есть ли способ сделать такое преобразование? Если да, как я могу этого достичь? Мое приложение представляет собой приложение Windows Forms, написанное на C# с использованием.NET Framework 4.5.2.

РЕДАКТИРОВАТЬ:

Здесь вы можете увидеть пример, как напечатать этикетку с файлом pcx:

TSC.openport(sPrinterName);
TSC.setup("100", "100", "4", "8", "1", "3.42", "0");
TSC.clearbuffer();

TSC.downloadpcx(@"\\PathToPcxFile\test.pcx", "test.pcx");
TSC.sendcommand("PUTPCX 35," + y + ",\"test.pcx\"");

TSC.printlabel("1", "1");
TSC.closeport();

Этот код отлично работает на реальных файлах pcx. Методы библиотеки TSC вы можете найти здесь.

downloadpcx (а, б)

Описание: Загрузить моно PCX графические файлы на принтер Параметр:

строка; имя файла (включая путь поиска файла)

b: строка, имена файлов, которые должны быть загружены в память принтера (используйте заглавные буквы)

Источник: http://www.tscprinters.com/cms/upload/download_en/DLL_instruction.pdf

РЕДАКТИРОВАТЬ II:

Работающий файл pcx (созданный с помощью фотошопа) выглядит следующим образом (если он вам помогает):

введите описание изображения здесь

1 ответ

Решение

Файлы PCX (в лучшем случае) основаны на палитре.

Таким образом, чтобы создать действительный вывод pcx, вам нужно добавить одну строку:

using (MagickImage image = new MagickImage(sourcePng))
{
    image.Format = MagickFormat.Pcx;
    image.ColorType = ColorType.Palette;  // <----
    image.Write(targetPcx);
}

Ваше изображение как файл pcx

Другие вопросы по тегам