XCreatePixmap
:
Pixmap XCreatePixmap( Display* /* display */, Drawable /* drawable */, unsigned int /* width */, unsigned int /* height */, unsigned int /* depth */ );Το δεύτερο όρισμα (
drawable
) χρειάζεται γιατί είναι ανάγκη να συσχετιστεί το
pixmap με κάποια οθόνη (screen
). Μπορούμε κάλιστα να χρησιμοποιήσουμε για
όρισμα το root window. Τα επόμενα ορίσματα καθορίζουν τις διαστάσεις και το
βάθος του pixmap
. Η Xlib για τα bitmaps διαθέτει συναρτήσεις που επιτρέπουν
να διαβάσουμε ή να γράψουμε bitmaps σε αρχεία ή ακόμη και να συμπεριλάβουμε
bitmaps με εντολές #include
στον κώδικά μας και να τα μετατρέψουμε (τα
bitmaps είναι στη μορφή που χρησιμοποιεί και το πρόγραμμα bitmap
):
(int) XReadBitmapFile( Display* /* display */, Drawable /* drawable */, char* /* filename */, unsigned int* /* width_return */, unsigned int* /* height_return */, Pixmap* /* bitmap_return */, int* /* x_hot_return */, int* /* y_hot_return */ ); (int) XWriteBitmapFile( Display* /* display */, char* /* filename */, Pixmap /* bitmap */, unsigned int /* width */, unsigned int /* height */, int /* x_hot */, int /* y_hot */ );Οι
XReadBitmapFile
και XWriteBitmapFile
διαβάζουν και σώζουν αντίστοιχα
bitmaps
από αρχεία. Οι τιμές x_hot
και y_hot
ορίζουν το "ενεργό" σημείο του
bitmap
σε περίπτωση που αυτό χρησιμοποιηθεί για το σχήμα του δείκτη του
ποντικιού, αλλιώς είναι αδιάφορο. Οι τιμές αυτές, καθώς και το μέγεθος του
bitmap
υπάρχουν μέσα στο αρχείο που το περιέχει (στην περίπτωση της
XReadBitmapFile
).
(Pixmap) XCreateBitmapFromData( Display* /* display */, Drawable /* drawable */, char* /* data */, unsigned int /* width */, unsigned int /* height */ ); (Pixmap) XCreatePixmapFromBitmapData( Display* /* display */, Drawable /* drawable */, char* /* data */, unsigned int /* width */, unsigned int /* height */, unsigned long /* fg */, unsigned long /* bg */, unsigned int /* depth */ );Καθώς τα bitmaps όπως σώζονται από το πρόγραμμα bitmap ειναι ascii και μάλιστα σε μορφή C κώδικα μπορούμε εύκολα να τα συμπεριλάβουμε στο πρόγραμμά μας με εντολές
#include
(όπως ήδη δείξαμε σε προηγούμενη παράγραφο με το
εικονίδιο του προγράμματος). Στην περίπτωση αυτή χρησιμοποιούμε τη συνάρτηση
XCreateBitmapFromData
για να κατασκευάσουμε το bitmap
. Έπειτα αν θέλουμε να
το μετατρέψουμε σε κανονικό pixmap
χρησιμοποιούμε την
XCreatePixmapFromBitmapData
η οποία παίρνει επιπλέον τα χρώματα που θέλουμε
να αποκτήσει το pixmap
, καθώς και το βάθος του.
Έχοντας ετοιμάσει ένα pixmap μπορούμε να το αντιγράψουμε σε κάποιο άλλο
pixmap ή παράθυρο με τις συναρτήσεις XCopyArea
και XCopyPlane
. Η XCopyArea
αντιγράφει όλα τα bitplanes ενός pixmap ενώ η XCopyPlane
αντιγράφει μόνο ένα
συγκεκριμένο bitplane
(χρήσιμη για bitmaps και μάσκες):
XCopyArea( Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */ ); XCopyPlane( Display* /* display */, Drawable /* src */, Drawable /* dest */, GC /* gc */, int /* src_x */, int /* src_y */, unsigned int /* width */, unsigned int /* height */, int /* dest_x */, int /* dest_y */, unsigned long /* bitplane */ );Τέλος όταν δεν χρειαζόμαστε πλέον κάποιο
pixmap
ή bitmap
που έχουμε
δημιουργήσει μποπούμε να το διαγράψουμε με την συνάρτηση XFreePixmap
:
XFreePixmap( Display* /* display */, Pixmap /* pixmap */ );