J'écris un programme qui doit imprimer des images .tiff haute résolution. Le problème que j'ai est que je ne peux pas imprimer le .tiff de bonne qualité. En raison de la grande taille du .tiff (8700x7200 par exemple) Il ne rentre pas sur n'importe quelle feuille de taille standard. J'ai essayé d'augmenter le DPI mais cela ne semblait pas avoir d'effet. La seule façon que je peux obtenir le .tiff pour adapter la page est de la réduire. mais alors l'image a une qualité horrible. (Je le redimensionne pour tenir sur un 11x17, mais qui a seulement une résolution indiquée de 1100x1700). J'ai essayé de changer les résolutions sur l'imprimante, essayé manuellement et en programmant la qualité/résolution de l'imprimante mais sans succès. Fondamentalement, je veux être en mesure d'ajouter plus de pixels du fichier .tiff sur la page 11x17 afin que je n'ai pas à l'échelle autant. Je pensais que l'augmentation de la dpi d'impression augmenterait la quantité de pixels sur un 11x17 pouces, mais il n'a eu aucun effet que je pouvais voir. Peut-être que je fais quelque chose de mal. Toute aide serait grandement appréciée. Merci.Amélioration de la qualité d'impression pour les images
Le code ci-dessous est ce que j'essaie de faire maintenant lorsque pd.Print() est appelé.
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
//float x = ev.MarginBounds.Left;
//float y = ev.MarginBounds.Top;
try
{
//ResizeImage(@"H:\21RR-G0K-30140-0220-0002.tiff", @"H:\21RR-G0K-30140-0220-0002-new.tiff", 500, 900, false);
Image tempImage = Image.FromFile(@"H:\21RR-G0K-30140-0220-0002.tiff");
Bitmap bMap = new Bitmap(tempImage);
bMap.SetResolution(1200, 1200);
string l = "";
tempImage = bMap;
/*if (tempImage.Width > tempImage.Height) //if poster is longer then it is tall, rotate the image. Done to match standard printing aspect ratios
{
Bitmap tempBitmap = new Bitmap(tempImage); //Need to convert to Bitmap type to do rotation
RotateBicubic rotationFilter = new RotateBicubic(90, true);
tempImage = rotationFilter.Apply(tempBitmap);
}*/
float ImageAspectRatio = (float)tempImage.Height/(float)tempImage.Width;
float PageSizeAspectRatio = (float)_pSize.Height/(float)_pSize.Width; //_pSize is the selected printing sheet size
if (ImageAspectRatio < 1 && PageSizeAspectRatio > 1) //Need to rotate Image. Can't attempt to rotate tempImage due to size. Scale then rotate.
{
double x_scale = (double)_pSize.Width/(double)tempImage.Height;
double y_scale = (double)_pSize.Height/(double)tempImage.Width;
int percent = 0;
if (y_scale < x_scale)
{
percent = Convert.ToInt32(y_scale * 100);
}
else
{
percent = Convert.ToInt32(x_scale * 100);
}
Image myImage = ImageManipulation.ScaleByPercent(tempImage, percent); //I know this line is the problem, but I can't fit the image on the page without massive scaling due to the page reolution restraints
Bitmap tempMap = new Bitmap(myImage);
tempMap.SetResolution(1200, 1200);
RotateBicubic rotateBC = new RotateBicubic(90);
Image finalImage = rotateBC.Apply(tempMap); //rotate the image 90 degrees using bicubic interpolation. This isn't what's killing the quality as the quality is no better with this disabled
ev.Graphics.DrawImage(finalImage, 0, 0);
}
else if (ImageAspectRatio >= 1 && PageSizeAspectRatio >= 1) //No Need for rotation
{
double x_scale = (double)_pSize.Width/(double)tempImage.Width;
double y_scale = (double)_pSize.Height/(double)tempImage.Height;
int percent = 0;
if (y_scale < x_scale)
{
percent = Convert.ToInt32(y_scale * 100);
}
else
{
percent = Convert.ToInt32(x_scale * 100);
}
Image myImage = ImageManipulation.ScaleByPercent(tempImage, percent);
ev.Graphics.DrawImage(myImage, 0, 0);
}
else
{
}
}
catch(Exception ex)
{
string breakingpoint = "";
}
}
Quel est ce que vous recommandez? en ce moment j'utilise la bibliothèque AForge Imaging – Megatron