Πέμπτη 29 Οκτωβρίου 2015

Μάθημα μετρήματος! Twips Pt και Pixes

Ένα μικρό πρόγραμμα που δείχνει την σχέση του μεγέθους γραμματοσειράς σε pt, με τα dpi του μέσου που θα εμφανιστούν τα γράμματα και τα twips, της υποδιαίρεσης της ίντσας (πάντα 1440 twips είναι μια ίντσα). Υπάρχει νέα αναθεώρηση 74 (μικρές εσωτερικές βελτιώσεις, και ένα σπάνιο bug)


τυπωσε $(4) \\ αναλογική γραφή
δες οκ {
Διάβασε α \\ τιμή σε Pixels  , αν δεν δώσουμε τιμή τότε βάζει το πρόγραμμα το 24
}
αν οχι οκ τότε α=24
β=1440/96 \\ 1440 twips έχει μια ίντσα. 96 dpi σημαίνει 96 pixels σε μια ίντσα
Τύπωσε μορφή$("τα {0}pt μέγεθος χαρακτήρα έχουν μέγεθος σε 96dpi: {1}twips",α, α*β)
Τύπωσε μορφή$("μέγεθος χαρακτήρα  {0}pt σε pixels {1}", α, α*96/72)
Τύπωσε μορφή$("μέγεθος χαρακτήρα  {0}pt σε twips {1}", α, α*96/72*β)
Τύπωσε μορφή$("μέγεθος χαρακτήρα  {0}pt σε ίντσες {1:2}", α, α*96/72*β/1440)
τυπωσε
β1=1440/120 \\ 1440 twips έχει μια ίντσα. 120 dpi σημαίνει 120 pixels σε μια ίντσα
Τύπωσε μορφή$("τα {0}pt μέγεθος χαρακτήρα έχουν μέγεθος σε 120dpi: {1}",α, α*β1)
Τύπωσε μορφή$("μέγεθος χαρακτήρα  {0}pt σε pixels {1}", α, α*120/72)
Τύπωσε μορφή$("μέγεθος χαρακτήρα  {0}pt σε twips {1}", α, α*120/72*β1)
Τύπωσε μορφή$("μέγεθος χαρακτήρα  {0}pt σε ίντσες {1:2}", α, α*120/72*β1/1440)


Από το παραπάνω πρόγραμμα βλέπουμε ότι μια γραμματοσειρά μεγέθους 24pt (24άρια γράμματα) θα έχουν ύψος 0.33 ίντσες ανεξάρτητα από το πόσα dpi έχει το μέσο εκτύπωσης (το ύψος δηλώνει το μέγεθος το γραμμάτων, όμως ακόμα και αυτή η έννοια στις γραμματοσειρές είναι πιο σύνθετη απ΄ότι φαίνεται, διότι υπάρχουν περιθώρια και το λεγόμενο ύψος βάσης γραμμής ή baseline).

Επίσης φαίνεται ότι όταν τα dpi είναι περισσότερα μια 24άρα γραμματοσειρά θέλει περισσότερα pixels για κάθε χαρακτήρα, άρα μικρότερα "δοντάκια" άρα καλύτερη εμφάνιση. Π.χ. στα 120 dpi έχουμε 40 pixels ύψος ανά χαρακτήρα, ενώ στα 96 έχουμε 32 pixels.

Δείτε έναν πίνακα εδώ με τις σχέσεις pixels και pt.

Δείτε όμως πως το λειτουργικό σύστημα τα αλλάζει όλα: Όταν για παράδειγμα δεν έχουμε συγχρονίσει τα 1440 twips με την μια ίντσα τότε δεν βλέπουμε μια γραμματοσειρά 24άρα ως μια 24άρα...αλλά όμως έχουμε επακριβώς τα 32pixels... επειδή ψευδώς το λειτουργικό πιστεύει ότι η οθόνη έχει 96 dpi. Έτσι έχουμε δυο ψεύτικες αναλογίες οι οποίες όμως μας δίνουν για τα 24άρια γράμματα τα ίδια Pixels. Το πρόβλημα υπάρχει αν υπολογίζουμε σε Pixels και βγάζουμε το κείμενο σε εκτυπωτή. Διότι οι εκτυπωτές εξ ορισμού έχουν πάντα αληθινά dpi, έτσι τα 1440 λογικά twips είναι πράγματι 1440 πραγματικά twips, δηλαδή μας κάνουν μια ίντσα!
Που υπάρχει πρόβλημα; Όταν για παράδειγμα θέλει κάποιος να προσαρμόσει γράμματα σε εικόνα, και η εικόνα είναι σε pixels τότε λογαριάζει τα pixels από την γραμματοσειρά, αλλά το μέγεθος της εικόνας πάνω στο χαρτί αν το λογαριάσουμε σε pixels τότε ανάλογα με τα  dpi του χαρτιού θα αλλάζει, ώστε λίγα dpi στο χαρτί σημαίνει μεγάλο μέγεθος εικόνας (θέλει περισσότερες ίντσες για να καλύψει κάθε pixel στον εκτυπωτή με κάθε pixel εικόνας).
Αν τοποθετούμε εικόνες με μέγεθος σε twips σημαίνει ότι μειώνουμε ή αυξάνουμε τα pixels για να ταιριάξουμε την εικόνα στα pixels της εξαγωγής (στην οθόνη ή στον εκτυπωτή). Αν κρατάμε εικόνες με μεγάλα Dpi σημαίνει ότι θα έχουμε καλύτερη ποιότητα σε εκτυπωτή απ΄ότι σε οθόνη, αφού ο εκτυπωτής ζητάει περισσότερα pixels για ίδια twips (ή για μια ίντσα αν δώσουμε ένα κοινό μέγεθος, είναι το ίδιο).  Όμως αν ένα πρόγραμμα ήταν γραμμένο να εμφανίζει εικόνες μόνο στην οθόνη τότε οι προγραμματιστές θεωρούσαν ότι τα dpi οθόνης θα είναι 96 και έτσι έβαζαν εικόνα με 96 dpi. Επειδή σε Mac τα dpi είναι 72, σημαίνει ότι εκεί θα έχουμε και περίσσευμα. Έτσι με εικόνα 96dpi έχουμε καλή σύμπτωση με τις οθόνες (και σε μια οθόνη 96dpi θα έχουμε αναλογία 1 προς 1, κάθε pixel της εικόνας θα πέσει σε ένα pixel της οθόνης). Με αυτό το σκεπτικό οι προγραμματιστές έφτιαχναν τα πάντα με την σκέψη των 96dpi, και τοποθετούσαν τα γράμματα με αυτό το σκεπτικό πάνω στις εικόνες. Τι συμβαίνει όμως όταν ανεβαίνουν οι αναλύσεις αλλά μικραίνει το μέγεθος της εικόνας (όπως στα tablets). Συμβαίνει ότι τα dpi θα αλλάξουν, πάρα πολύ. Για να ταιριάξει κανείς 24άρια γράμματα με εικόνα θα το κάνει αλλά ο χρήστης θα βλέπει μια μινιατούρα. Οπότε θα πρέπει να "ζουμάρει". Και τότε θα δει τα ωραία δοντάκια! Αν το πρόγραμμα δεν λογαριάζει χωριστά χαρακτήρες με εικόνες (bitmap), τότε το ζουμ θα φέρει ή μετακίνηση της εικόνας αφήνοντας μεγάλο περιθώριο κάτω από τα γράμματα, ή αν ακολουθήσει η εικόνα (που είναι το σωστό), τότε θα έχουμε εμφάνιση της χαμηλής ποιότητας, αφού δυο ή περισσότερα pixels της "πλούσιας" σε pixel οθόνης θα καλύπτονται από ένα και μόνo pixel της φτωχής σε pixel εικόνας.
Μια άλλη πρακτική είναι να κάνουμε το ράστερ των γραμμάτων  (τα pixels τους) πριν την μεγέθυνση. Αυτό σημαίνει ότι κατά τη μεγέθυνση δεν θα υπολογίζονται ενδιάμεσα μεγέθη γραμμάτων, και όταν αφήσουμε το ζουμ, τότε να υπολογιστεί το τελικό ράστερ. Αυτό το βλέπουμε σε προγράμματα που κατά το ζουμ η ποιότητα είναι μικρή ενώ η ταχύτητα αλλαγής μεγέθους μεγάλη και μόλις το αφήσουμε σε ηρεμία έρχεται μια ποιοτική εικόνα. Το κάνει αυτό ο Acrobat Reader. Σε κάθε περίπτωση ο υπολογισμός γίνεται με βάση το λόγο Pixels Τελικής Προβολής προς Pixels αρχικής Προβολής. Η αρχική προβολή είναι η υποθετική στα 96 dpi. Να γιατί έχουν εγκαταλειφθεί τα twips, αφού είδαμε ότι και αυτά είναι ψεύτικα, αφού δεν κάνει κανείς χρήστης την λειτουργία που έχουν τα windows για να ορίσουμε μια ίντσα στην οθόνη να είναι μια πραγματική ίντσα, και έτσι έχει το μέτρο για να βγάζει 1440twips γραμμή ως μια ίντσα γραμμή.
Στη Μ2000 όλα είναι σε twips (ο τύπος χαρακτήρων (το μέγεθος δηλαδή) είναι σε pt). Αυτό ήταν επιλογή γιατί μια από τις κύριες χρήσεις της γλώσσας είναι το σχέδιο, και οφείλει να βγαίνει στο χαρτί με το μέγεθος που θέλουμε, και εκεί τα twips είναι πραγματικά (1440 twips μια ίντσα). Για την οθόνη μας δεν μας πειράζει επειδή ότι φτιάχνουμε έχει να κάνει με τις θέσεις χαρακτήρων (σαν κάναβος ένα πράγμα), ή με την σχετική θέση π.χ. το χ.σημεία δίνει το πλάτος σε twips. Μπορώ να φορτώσω μια εικόνα στο σημείο του δρομέα γραφικών (π.ψ Θέση 6000,6000 πάει τον δρομέα στο 6000,6000) και να δώσω στην εντολή απεικόνισης το πλάτος σε twips και το ύψος όσο βγαίνει χωρίς να χαλάει την αναλογία, ή να δώσω ένα ύψος, άρα να χαλάσω την αναλογία ύψους πλάτους.

Αν έχω μια φωτογραφία π.χ. C:\alfa\beta.jpg  η εντολή Εικόνα "C:\alfa\beta.jpg", 1000 βάζει την εικόνα στο δρομέα γραφικών ( ως πάνω αριστερή γωνία) και πλάτος 1000 twips (1000/1440 υποτίθεται της ίντσας στην οθόνη, αλλά πραγματικό μέγεθος στον εκτυπωτή, ανεξάρτητα από πόσα dpi είναι ο εκτυπωτής). Αν θέλω να χωρίσω την οθόνη μου σε 8 στήλες για παράδειγμα όπου θα βάζω φωτογραφίες, θα πρέπει να πάρω το χ.σημεία/8 ως πλάτος στήλης, Η εντολή βήμα χ.σημεία/8, 0 πάει τον δρομέα δεξιά κατά χ.σημεία/8 (σχετική θέση). Ενώ η εντολή θέση χ.σημεία/8*3, 2000 πάει στην 4η στήλη στο ύψος 2000 (0 η πρώτη, 1 η δεύτερη, 2 η τρίτη, άρα 4 η τέταρτη).
'Ετσι δεν ασχολούμαστε με Pixels (η Μ2000 έχει εντολές για περιστροφή εικόνας, ακόμα και για διαφάνεια, και δεν ειδικεύεται ως γλώσσα στην επεξεργασία pixels, στην 9η έκδοση θα βάλω κάτι τέτοιο, δηλαδή επεξεργασία pixels, βίντεο και ήχου, αλλά αργεί ακόμα, θέλω να βάλω και ενσωματωμένο assembler αλλά είναι κομμάτι δύσκολο, όποιος θέλει να συνεισφέρει στο έργο..ας επικοινωνήσει μαζί μου).




Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.