La fonction ci-dessous imprime une image tramée couleur sur une imprimante PCL-5. La fonction a été adaptée à partir d'une fonction d'impression bicolore (1bpp) qui fonctionnait parfaitement, à l'exception de l'impression bicolore granuleuse. Le problème est que l'image sort avec une grande barre noire allant de la droite de l'image au bord de la page comme ceci:Les graphismes couleur PCL raster sont déformés. Code inclus: qu'est-ce qui me manque?
IMAGE#########################################
IMAGE#########AREA COMPLETELY BLACK###########
IMAGE#########################################
L'image elle-même est parfait, sinon.
Divers outils PCL-to-PDF ne montrent pas l'image du tout, ce qui me porte à croire que j'ai oublié de faire quelque chose. Des réinitialisations appropriées (\ u001bE \ u001b% -12345X) ont déjà été envoyées et les flux de pages suivants.
Tous les experts PCL disponibles? J'ai le Manuel de référence technique PCL 5 Color, et ça m'a permis d'aller aussi loin. Cette dernière chose me rend fou quand même.
* Edit: Je sais maintenant ce que la commande est à l'origine du problème, mais je ne sais pas pourquoi:
stream("\u001b*r0F");
Cela devrait garder l'image en rotation avec la page (portrait, paysage). Si je supprime cela, le problème disparaît. Je peux compenser en tournant le bitmap au préalable, mais je veux vraiment savoir ce qui a causé ça!
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)
}
Le positionnement était une erreur de couper-coller (le vôtre a aussi une faute de frappe). J'ai décidé d'oublier la rotation PCL, et de me tourner moi-même. Résolu tous mes problèmes. Nous utilisons deux visualiseurs PCL ici, et aucun n'a montré le problème, seulement l'imprimante elle-même. Je suis toujours perplexe mais j'ai un code de travail. –