DPI Graphiques de Résolution d'Écran de Pixels WinForm PrintPageEventArgs
Comment Dpi Points concernent Pixels pour afficher ma demande est en cours d'exécution sur?
int points;
Screen primary;
public Form1() {
InitializeComponent();
points = -1;
primary = null;
}
void OnPaint(object sender, PaintEventArgs e) {
if (points < 0) {
points = (int)(e.Graphics.DpiX / 72.0F); //There are 72 points per inch
}
if (primary == null) {
primary = Screen.PrimaryScreen;
Console.WriteLine(primary.WorkingArea.Height);
Console.WriteLine(primary.WorkingArea.Width);
Console.WriteLine(primary.BitsPerPixel);
}
}
Faire, j'ai maintenant toutes les informations dont j'ai besoin?
Puis-je utiliser l'une des informations ci-dessus pour savoir de combien de temps 1200 pixels est?
Remarque: une Fois que j'apprends comment faire pour afficher mon Formulaire universellement, les données sur ce formulaire sera envoyé à une imprimante, d'où le
PrintPageEventArgs
dans le titre.
OriginalL'auteur jp2code | 2011-02-25
Vous devez vous connecter pour publier un commentaire.
DPI littéralement signifie "Points Par Pouce" - où les points==pixels. Donc, pour déterminer combien de temps 1200 pixels est:
Pas vrai. J'ai tester mon application à 192DPI, par exemple. Il n'a pas l'air très funky, mais il évolue bien!
avez-vous d'en acheter un autre moniteur pour correspondre à ce que le réglage dpi? Nécessaire pour obtenir le pouce de mesure de la même chose.
J'ai manifesté mon appli pour être DPIAWARE et puis je pensais que je devais au moins le souligner! Malheureusement, vous ne pouvez pas acheter des panneaux avec assez de pixels pour faire ce paramètre PPP viables, mais elle ne serait génial si vous pouviez. Et je suis prêt pour ça!!
OriginalL'auteur John Arlen
Je me rends compte qu'il a été quelques mois, mais lors de la lecture d'un livre sur WPF, je suis tombé sur la réponse:
Si vous utilisez Windows standard réglage DPI (96 dpi), chaque appareil indépendant de l'unité correspond à un réel, physique de pixel.
Donc, 96 pixels pour un pouce à travers le système Windows paramètres PPP.
Cependant, ce n'est, en réalité, tout dépend de votre taille d'affichage.
Pour un 19 pouces PMA moniteur avec une résolution de 1600 x 1200, utiliser le théorème de Pythagore permet de calculer la densité de pixels de l'écran:
À l'aide de ces données, j'ai écrit un peu statique l'outil que j'ai maintenant dans mes Outils de la classe de tous mes projets:
J'espère que d'autres pour obtenir une certaine utilisation de ce chouette petit outil.
OriginalL'auteur jp2code
De l'écran: pixels = Graphiques.DpiY * points /72
Pour l'imprimante, mentionné dans votre question, la cartographie est de 1 'pixel' == 0,010 po par défaut. C'est assez proche de la valeur par défaut de la vidéo résolution de 96 points par pouce faire la copie sur papier de la même taille que ce que vous voyez sur l'écran.
Faire des captures d'écran de votre forme et de l'impression est une mauvaise idée. Les imprimantes ont beaucoup plus d'résolutions, 600 dpi est typique. L'impression sera granuleuse que chaque pixel sur l'écran devient un 6x6 goutte sur le papier. Particulièrement sensible et moche pour du texte anti-aliasé.
Très boueux en effet. Utilisation PrintPreviewDialog, aucun travaux à prévoir.
Mais, qui est venu en premier, l'Œuf ou la poule? LOL - j'ai de la peinture de l'objet à quelque CHOSE avant que je puisse utiliser MS du PrintPreviewDialog ...à moins que je me manque quelque chose.
Euh, vous voulez finalement à imprimer. Une fois que vous avez cela, vous obtenez le preview gratuitement. Le faire dans l'autre sens est une perte de temps. Mettre en œuvre les PrintDocument.PrintPage gestionnaire d'événement.
...eh bien, dans ce cas, je serais obligé de créer un personnalisé PrintPreview. Ma peinture événement va envoyer les informations d'un panneau sur la forme. Il y aura aussi des boutons Ajouter et Supprimer pour inclure plus de "objets" de la liste à imprimer.
OriginalL'auteur Hans Passant