3.3.5 PIXMAPS 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 */
);