2016-11-17 2 views
0

J'essaie de comprendre les bases derrière Pixbuf et ses méthodes d'usine new_from_data et new_from_stream.GdkPixbuf peut être créé avec `new_from_data` et` new_from_stream`. Pourquoi ce dernier ne nécessite-t-il pas la résolution?

new_from_data requiert une chaîne d'octets contenant les données d'image et d'autres informations telles que des bits par échantillon, avec et hauteur d'image.

Ce que je ne comprends pas pourquoi new_from_stream ne nécessite pas les informations d'image supplémentaires. Alors, comment le Pixbuf sait-il comment rendre l'image? new_from_stream ne fournit pas d'information supplémentaire autre que le Gio.InputStream?

Répondre

1

new_from_stream() s'attend à obtenir un flux d'un fichier image pris en charge, équivalent à new_from_file(). Tous les formats d'image contiennent des métadonnées comme la hauteur et la largeur. D'autre part, attend un tampon de pixels, qui est essentiellement juste un tableau de pixels sans aucune métadonnée.

+0

Merci pour la réponse. Je me demandais: serait-il possible (et efficace) de garder un pixbuf et de changer les données (données similaires à celle fournie par 'new_from_data')? Cela parce que je crains que 'new_from_stream' soit moins rapide car il a besoin d'analyser un format d'image, ce qui pourrait ne pas convenir à l'affichage de vidéos générées à la volée. – fstab

+0

Si vous avez besoin de toucher l'image souvent (comme chaque cycle de dessin), modifier les données semble définitivement mieux que de créer un pixbuf à chaque fois: l'allocation de mémoire prend du temps ... Peut-être que 'get_pixels()' est utile pour vous . – jku

+0

n'est pas un objet "bytes" (celui retourné par 'get_pixels()') immuable en python? – fstab