2016-03-03 14 views
5

Próbuję przekonwertować plik .png do pliku .pcx. Scenariusz jest następujący:przekonwertować plik PNG do pliku pcx za pomocą C#

Używam drukarki etykiet TSC TTP-343C. Na etykietach muszę drukować obrazy. TSC zapewnia programistom library documentation. Ponieważ mogę drukować obrazy na tych etykietach za pomocą plików pcx, muszę przekonwertować wszystkie obrazy na obrazy pcx. Każdy inny format lub nawet niepoprawny format pcx (np. Jeśli użytkownik właśnie zmienił nazwę pliku kończącego) nie zostanie wydrukowany na etykiecie.

Widziałem this post łączenie z biblioteką . W tym poście OP próbuje przekonwertować plik bmp na plik pcx, który nie jest dokładnie tym, co próbuję osiągnąć. Spojrzałem na Magickdocumentation o converting images. Próbowałem przekonwertować obrazy takie jak:

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 
} 

Niestety to nie zapisuje poprawnie obrazu. Drukarka etykiet nadal nie może wydrukować obrazu na etykiecie. Próbowałem wydrukować poprawny plik pcx i działało dobrze. Sądzę, że jedynym powodem, dla którego nadal nie działa, jest przekonwertowanie pliku, który nie jest rzeczywistym plikiem pcx.

Czy istnieje sposób na dokonanie takiej konwersji? Jeśli tak, jak mogę to osiągnąć? Moja aplikacja to aplikacja formularzy systemu Windows, napisana w języku C# przy użyciu platformy .NET 4.5.2.

EDIT:

Tutaj można zobaczyć przykład jak wydrukować etykietę z pliku 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(); 

Ten kod działa poprawnie na rzeczywistych plików PCX. Metody biblioteki TSC można znaleźć here.

downloadpcx (a, b)

Opis: Pobierz mono PCX plików graficznych do parametru drukarki:

a: ciąg; Nazwa pliku (w tym pobierania plików path)

b: string, nazwy plików, które mają być pobrane w pamięci drukarki (Proszę używać liter)

Źródło: http://www.tscprinters.com/cms/upload/download_en/DLL_instruction.pdf

EDIT II:

Plik pcx, który działa (utworzony przy użyciu programu Photoshop) wygląda tak (jeśli ci to pomaga):

enter image description here

+0

Widziałeś coś o czym [format PCX] (https://en.wikipedia.org/wiki/PCX) jest w porządku? Czy możesz dodać link do działającego przykładu? Czy potrzebujesz kolorów? – TaW

+0

@TaW Nie mogę znaleźć określonego formatu w dokumentacji. Dodałem działający przykład (działa tylko z poprawnymi przekonwertowanymi plikami pcx) na moje pytanie, proszę spojrzeć. Kolory nie są potrzebne. Drukarka nie jest nawet w stanie drukować kolorów, jak sądzę. – Roman

+0

@TaW Dodałem zrzut ekranu pliku PCX, który działa na moje pytanie. Mam nadzieję, że ci to pomoże. – Roman

Odpowiedz

6

PCX files są (w najlepszym wypadku) paleta oparte.

Więc można utworzyć poprawnego wyjścia PCX trzeba dodać tę jedną linię:

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

Your image as pcx file

+3

Nie wiesz, jak bardzo jestem wdzięczny! Dziękuję Ci bardzo. – Roman

Powiązane problemy