PCL 래스터 컬러 그래픽이 왜곡되었습니다. 코드 포함 : 무엇이 누락 되었습니까?

StackOverflow https://stackoverflow.com/questions/309150

문제

아래의 기능은 컬러 래스터 이미지를 PCL-5 프린터에 인쇄합니다. 이 기능은 거친 2 색 인쇄를 제외하고는 완벽하게 작동 한 2 색 (1BPP) 인쇄 기능에서 조정되었습니다. 문제는 이미지가 이미지의 오른쪽에서 페이지의 가장자리로 확장되는 큰 검은 색 막대가 나오는 것입니다.

  IMAGE#########################################
  IMAGE#########AREA COMPLETELY BLACK###########
  IMAGE#########################################

이미지 자체는 완벽 해 보입니다.

다양한 PCL-to-PDF 도구는 이미지를 전혀 보여주지 않으므로 잊어 버린 것을 믿게됩니다. 적절한 재설정 ( u001be u001b%-12345x)이 이전에 전송되었고 그 후 페이지 공급이 전송되었습니다.

거기에 PCL 전문가가 있습니까? 나는 PCL 5 컬러 기술 참조 매뉴얼을 가지고 있었고 지금까지 나를 얻었다. 이 마지막은 나를 미치게 만들고 있습니다.

*편집 : 이제 어떤 명령이 문제를 일으키는 지 알고 있지만 그 이유를 모르겠습니다.

  stream("\u001b*r0F"); 

이렇게하면 이미지가 페이지 (초상화, 풍경)와 함께 회전해야합니다. 이것을 제거하면 문제가 사라집니다. 비트 맵을 미리 회전시켜 보상 할 수는 있지만,이 원인이 무엇인지 정말로 알고 싶습니다!

   static void PrintImage()
    {
        // Get an image into memory
        Image original = Image.FromFile("c:\\temp\\test.jpg");
        Bitmap newBitmap = new Bitmap(original, original.Width, original.Height);

        stream(String.Format("\u001b*p{0:d}x*p{1:d}Y", 1000, 1000));// Set cursor.
        stream("\u001b*t300R");                                     // 300 DPI
        stream(String.Format("\u001b*r{0:d}T", original.Height));   // Height
        stream(String.Format("\u001b*r{0:d}S", original.Width));    // Width

        stream("\u001b*r3U");      // 8-bit color palette
        stream("\u001b*r0F");      // Follow logical page layout (landscape, portrait, etc..)
        // Set palette depth, 3 bytes per pixel RGB
        stream("\u001b*v6W\u0000\u0003\u0000\u0008\u0008\u0008");  
        stream("\u001b*r1A");      // Start raster graphics
        stream("\u001b*b0M");      // Compression 0 = None, 1 = Run Length Encoding

        // Not fast, but fast enough.  
        List<byte> colors = new List<byte>();
        for (int y2 = 0; y2 < original.Height; y2++)
        {
            colors.Clear();
            for (int x2 = 0; x2 < original.Width; x2++)
            {
                Color c = newBitmap.GetPixel(x2, y2);
                colors.Add(c.R);
                colors.Add(c.G);
                colors.Add(c.B);
            }

            stream(String.Format("\u001b*b{0}W", colors.Count));     // Length of data to send
            streamBytes(colors.ToArray());                           // Binary data
        }
        stream("\u001b*rB");   // End raster graphics  (also tried *rC -- no effect)
    }
도움이 되었습니까?

해결책

코드에는 몇 가지 문제가 있습니다. 먼저 커서 위치 코드가 올바르지 않으면 다음을 읽어야합니다.

"\u001b*p{0:d}x1:d}Y", 1000, 1000

이것은 다음과 같습니다.

<esc>*p1000x1000Y

당신은 :

<esc>*p1000x*p1000Y

PCL 명령에 합류 할 때 동일한 매개 변수화 된 값과 그룹을 일치시킨 다음 값 + 매개 변수화 된 문자 + value + 매개 변수화 된 문자 등을 추가합니다. 최종 매개 변수화 된 문자가 PCL 명령의 끝을 의미하는 대문자인지 확인하십시오.

또한 이미지를 정의 할 때 디피 포인트의 너비 및 하이트를 지정하는 것이 좋습니다. 이렇게하면 페이지의 이미지 스케일링 (*r3a)에 도움이 되므로이 추가 (해상도 명령이 괜찮은 후에는 괜찮습니다). :

Int32 deciHeight = original.Height / (int)original.HorizontalResolution * 720;
Int32 deciWidth = original.Width / (int)original.VerticalResolution * 720;
stream("\u001b*t{0:d}h{1:d}V", deciHeight, deciWidth));

다른 권장 사항은이 모든 것을 파일에 작성하고 (인코딩을보고) 소수의 PCL 뷰어 중 하나를 사용하여 데이터를보고 항상 인쇄하는 것입니다. 시간과 숲 한두 시간을 절약해야합니다! 나는 그들 모두를 시도했고 Wold는 89 달러를 지출하고 구매하는 것을 권장합니다. pclworks. PCL을 많이 할 경우 완전한 SDK가 있습니다. 우리는 모든 PCL을 직접 코딩 할 때 사용하지 않지만 좋아 보입니다.

회전과 관련하여 일부 장치에 문제가 있었으며 JPG를 먼저 회전시킬 수 있습니다 (Original.rotateFlip).

오늘은 시간이 많지 않지만 내 의견이 도움이되기를 바랍니다. 월요일이나 화요일에 코드를 테스트하고 작업하고 추가 의견을 게시 할 수 있습니다.

PCL이 표준이지만 제조업체에서 제조업체 및 장치에 대한 장치에 대한 지원은 문제가되고 크게 다를 수 있습니다. 기본적인 일을 할 때 대부분의 장치는 괜찮아 보입니다. 그러나 매크로 또는 복잡한 그래픽에 들어가면 차이가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top