PCL الرسومات النقطية اللون مشوهة. وشملت الرمز: ما أنا في عداد المفقودين؟

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

سؤال

وظيفة طباعة أدناه صورة ملونة النقطية إلى طابعة PCL-5. تم تعديل وظيفة من وظيفة الطباعة 2-لون (1bpp) التي كان علينا أن عملت تماما، باستثناء محببة الطباعة 2-اللون. والمشكلة هي أن الصورة يخرج مع شريط أسود كبير يمتد من الجهة اليمنى من الصورة إلى حافة الصفحة مثل هذا:

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

والصورة نفسها تبدو مثالية، وغير ذلك.

ومختلف أدوات PCL إلى 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 معا لك تطابق نفس القيمة معلمات ومجموعة ثم ببساطة إضافة قيمة + الطابع parametrized + قيمة + الطابع parametrized الخ تأكد من أن الطابع parametrized النهائي هو حرف مما يدل على نهاية الأمر PCL .

وأيضا عند تحديد صورة أنصحك أيضا تحديد عرض وهايت في decipoints، وهذا من شأنه أن يساعد مع التحجيم للصورة (* 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 لعرض البيانات الخاصة بك مقابل طباعته دائما. يجب أن يوفر لك بعض الوقت وغابة أو اثنين! لقد حاول كل منهم، والقفر نوصي تنفق 89 $ وشراء pclWorks . لديهم أيضا SDK كاملة إذا كنت تنوي القيام به الكثير من PCL. نحن لا نستخدم ذلك ونحن ترميز ثابت للجميع PCL أنفسنا لكنها لا تبدو جيدة.

وأما بالنسبة للدوران، كان لدينا بعض المشاكل على الجهاز، هل يمكن أن مجرد تدوير وJPG أولا (original.RotateFlip) وثم الكتابة بها.

وأنا لم يكن لديك الكثير من الوقت اليوم، ولكن نأمل أن تعليقاتي مساعدة. يمكنني اختبار التعليمات البرمجية يوم الاثنين أو الثلاثاء والعمل معها والرد على أي تعليقات أخرى.

ونضع في اعتبارنا أنه على الرغم من PCL هو معيار دعمها من مصنع لآخر وجهاز إلى جهاز يمكن أن يكون مشكلة ومختلفة إلى حد كبير. عندما تفعل الأشياء الأساسية معظم الأجهزة ويبدو بخير. ومع ذلك، إذا كنت تحصل في وحدات الماكرو أو رسومات معقدة سوف تجد الفرق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top