2010-12-05 72 views
1

Je dois écrire du code en utilisant des bitmaps. Y a-t-il une bonne introduction au sujet pour me lancer?Où puis-je trouver une bonne introduction aux bitmaps?

+1

Est-ce que cette question a un rapport avec la programmation? –

+1

Vous devriez vraiment clarifier votre question .. que voulez-vous savoir? Compression? Format de fichier? – ThiefMaster

+0

Je le pense. Ma réponse est toutes les bases que j'ai dû apprendre quand j'ai commencé à écrire des programmes qui manipulent des bitmaps. Je pense que la plupart des programmeurs de jeux seraient d'accord. –

Répondre

4

A l'origine posté à What every developer should know about bitmaps (mieux formaté avec des images). Pratiquement chaque développeur utilisera des bitmaps à certains moments de leur programmation.

Ou si pas dans leur programmation, alors dans un site Web, un blog, ou des photos de famille. Pourtant, beaucoup d'entre nous ne connaissent pas les compromis entre un fichier GIF, JPEG ou PNG - et il y a quelques différences majeures là-bas. Ceci est un court article sur les bases qui sera suffisant pour la plupart, et un bon début pour le reste. La plupart de ce que j'ai appris en tant que développeur de jeux (inc Enemy Nations) où vous avez besoin d'une compréhension profonde des graphiques. Les bitmaps stockent fondamentalement la couleur de chaque pixel en

Mais il y a trois composants clés à cela:

  1. Mémorisation de la valeur de couleur elle-même. La plupart des d'entre nous sont familiers avec RVB où stocke le composant rouge, vert, & bleu de chaque couleur. C'est effectivement la méthode la moins efficace que l'œil humain peut voir des différences subtiles sur certaines parties du spectre de couleurs plus que d'autres. Il est également inefficace pour de nombreuses opérations courantes sur une couleur telle que l'éclaircir. Mais c'est le le plus simple pour les tâches de programmation les plus courantes et est donc devenu la norme. La transparence de chaque pixel. Ceci est critique pour le bord des images non rectangulaires. Une ligne diagonale , pour rendre le meilleur, sera une combinaison de la couleur de la ligne et la couleur du pixel sous-jacent . Chaque pixel a besoin de pour que son niveau de transparence (ou réellement l'opacité) soit fixé à 0% (affiche le pixel sous-jacent) à 100% (affiche juste le pixel de l'image ).
  2. Les métadonnées bitmap. Ce est informat sur l'image que peut varier des tables de couleur et résolution au propriétaire de l'image .

Compression

bitmaps prennent beaucoup de données. Ou pour être plus précis, ils peuvent prendre beaucoup d'octets. La compression a été le principal moteur des nouveaux formats bitmap au fil des ans. Compression est disponible en trois saveurs, réduction de la palette, lossless &. Dans les premiers jours, la réduction de la palette était l'approche la plus courante. Certains programmes utilisaient des bitmaps noirs & blancs, donc 1 bit par pixel. Maintenant, ça fait pression. Et dans les jours de Windows 3.1 16 images couleur (4 bits/pixel) étaient encore largement utilisés. Mais l'utilisation principale était le cas de 8 bits/256 couleurs pour un bitmap. Ces 256 couleurs correspondraient à une palette qui faisait partie de l'image bitmap et cette palette possédait une couleur de 24 bits pour chaque entrée. Cela permet à un programme de sélectionner les 256 couleurs sur le spectre complet qui affiche le mieux l'image.

Cette approche était assez bonne et échouait en général pour les surfaces planes qui avaient une transition très lente à travers la surface. Il a également rencontré un problème majeur dès le début avec les systèmes d'exploitation Web et fenêtrés - car les cartes vidéo étaient également des systèmes 8 bits avec une seule palette pour l'ensemble de l'écran. C'était bien pour un jeu qui possédait tout l'écran, mais pas pour quand des images de différentes sources partageaient l'écran. La solution à ceci est une palette Web standard a été créée et la plupart des navigateurs, etc. ont utilisé cette palette s'il y avait la contention de palette. Finalement, il y avait quelques solutions intermédiaires telles que 16 bits/pixel qui fournissaient le spectre entier, mais avec un niveau grossier de granularité où l'œil humain pouvait voir des sauts dans les changements de nuances. Ceci a trouvé peu d'usage parce que les prix de mémoire ont chuté et les cartes vidéo ont sauté rapidement de 8 bits à 24 bits dans une année.

La compression suivante est la perte. La compression consiste à trouver des motifs qui se répètent dans un fichier, puis dans le second cas, il suffit de revenir à la première exécution. Que faire si vous avez une course de 20 pixels où la seule différence dans la deuxième course est que deux des pixels sont plus rouges d'une valeur de 1? L'œil humain ne peut pas voir cette différence. Donc, vous changez la deuxième course pour correspondre à la première et le tour est joué, vous pouvez le compresser. La plupart des schémas de compression avec perte vous permettent de définir le niveau de perte.

Cette approche pose un problème sérieux lorsque vous utilisez une seule couleur pour désigner la transparence. Si cette couleur est décalée d'un seul bit, elle n'est plus transparente. C'est pourquoi les formats avec perte ont été utilisés presque exclusivement pour les images et jamais dans les jeux.

Finalement, il est sans perte. C'est là que le programme comprime la morve hors de l'image sans perte d'information. Je ne vais pas plonger dans quoi/comment de cela, sauf pour soulever le point que la compression des images prend beaucoup plus de temps que de les décompresser. Donc, l'affichage des images compressées - rapide. Compression d'images - pas si vite. Cela peut conduire à des situations où, pour des raisons de performance, vous ne voulez pas stocker dans un format sans perte à la volée.

Transparence

La transparence se décline en trois saveurs. (Si vous connaissez un artiste qui crée du contenu Web - demandez-lui de lire cette section.) Le premier arôme est nul - le bitmap est un rectangle et obscurcira chaque pixel en dessous.

La seconde est une image bitmap où une valeur de couleur désignée (la plupart utilisent du magenta mais peut être n'importe quelle couleur) signifie transparente. Ainsi, les autres couleurs sont dessinées et les pixels magenta ne sont pas dessinés, de sorte que le pixel sous-jacent est affiché. Cela nécessite de rendre l'image sur une couleur d'arrière-plan sélectionnée et les pixels de bord qui devraient être partiellement l'image et partiellement le pixel d'arrière-plan sont alors partiellement la couleur d'arrière-plan. Vous voyez cela dans la pratique avec 256 icônes de couleur où ils ont des bords parfaits sur un fond blanc mais ont un effet de halo blanc étrange sur leurs bords sur un fond noir.

La troisième saveur est de 8 bits de transparence (c'est-à-dire 256 valeurs de 0 à 100%) pour chaque pixel. C'est ce que l'on entend par un bitmap 32 bits, c'est 24 bits de couleur et 8 bits de transparence. Cela fournit une image qui a des graduations plus fines que l'œil humain peut discerner. Un mot d'avertissement lorsque vous parlez à des artistes - ils peuvent tous produire des «bitmaps 32 bits». Mais 95% d'entre eux en produisent un où chaque pixel est réglé à 100% d'opacité et n'ont aucune idée de l'ensemble du processus et du besoin de transparence. (Les artistes de jeux sont une exception notable - ils l'ont fait pour toujours.) Pour un bon exemple de la façon de faire cela, jetez un oeil à Icon Experience - Je pense que leurs bitmaps sont superbes (nous les utilisons dans AutoTag).

Résolution

De nombreux formats ont une résolution, normalement décrit comme DPI (points par pouce). Lorsque vous regardez une photo, ce n'est généralement pas un problème. Mais prenons l'exemple d'un graphique rendu en bitmap. Vous voulez que le texte dans le tableau soit lisible, et vous voudrez peut-être imprimer correctement sur une imprimante 600 DPI, mais sur l'écran, vous voulez que les 600 points qui prennent un pouce à afficher en utilisant seulement 96 pixels. La résolution fournit cette capacité. Le DPI n'existe pas dans certains formats et est facultatif dans d'autres (note: il n'est requis dans aucun format, mais il est inhabituel qu'il soit manquant dans le format PNG). Le problème important de DPI est que lors du rendu d'un bitmap, l'utilisateur peut vouloir zoomer et/ou imprimer à la résolution de l'imprimante, mais afficher à une résolution plus faible - vous devez fournir la capacité pour l'appel programme pour définir le DPI. Il y a un programme de cartographie très puissant qui est inutile, sauf pour la visualisation standard sur un moniteur - parce qu'il rend à 96 DPI et c'est tout. Ne limitez pas vos utilisations.

Formats de fichier

Ok, donc ce que les formats de fichiers utiliser? Passons du plus utile au moins utile. PNG - Compression sans perte de 32 bits (ou moins), petits fichiers - ce qui ne plaît pas. Les versions plus anciennes de certains navigateurs (comme Internet Explorer) afficheraient les pixels transparents avec une couleur blanc cassé, mais les nouvelles versions le gèrent correctement. Utilisez ceci (en mode 32 bits en utilisant 8 bits pour la transparence) pour tout. ICO - Il s'agit du fichier d'icônes utilisé pour représenter les applications sur le bureau, etc. Il s'agit d'un ensemble de bitmaps pouvant avoir une résolution et une profondeur de bits différentes. Pour cela, construisez-le en utilisant seulement des fichiers png de 32 bits de 16x16 à 256x256. Si votre O/S ou une application a besoin d'une profondeur de bits moindre, elle sera réduite à la volée - et conservera les 8 bits de transparence.

JPEG - 24 bits uniquement (c'est-à-dire sans transparence), avec des fichiers de petite taille avec perte. Il n'y a aucune raison d'utiliser ce format à moins d'avoir un nombre important de personnes utilisant d'anciens navigateurs. Ce n'est pas un mauvais format, mais il est inférieur au format PNG sans avantages. GIF - Taille de fichier de 8 bits, avec perte et très petite taille. GIF a deux caractéristiques uniques. Tout d'abord, vous pouvez placer plusieurs bitmaps GIF dans un seul fichier avec un délai entre chaque. Il jouera ensuite à travers ceux qui vous donnent un bitmap animé. Cela fonctionne sur tous les navigateurs vers les versions 0.9 et c'est une taille de fichier plus petite qu'un fichier flash. D'un autre côté, ce n'est que 8 bits et dans le monde d'aujourd'hui qui a tendance à paraître pauvre (bien que certains artistes peuvent faire des choses incroyables avec seulement 8 bits). Il a également une couleur définie comme transparente de sorte qu'il supporte nativement la transparence (de la variété on/off). Ceci est utile si vous voulez des bitmaps animés sans la surcharge de flash ou si la bande passante est un problème majeur. BMP (également appelé DIB) - de 1 à 32 bits, sans perte, grand format de fichier. Il y a un cas à utiliser - quand la vitesse est le problème primordial. De nombreux programmes de jeu 2D, en particulier avant les cartes graphiques disponibles aujourd'hui, stockent tous les bitmaps en tant que BMP/DIB car aucune décompression n'est nécessaire et le gain de temps est essentiel lorsque vous essayez d'afficher 60 images/seconde pour un jeu. TIFF - n'importe quelle profondeur de bits, n'importe quelle compression (avec ou sans pertes), tout y compris l'évier de cuisine - et pas mieux que le PNG. Fondamentalement, le gouvernement et certaines grandes entreprises ont décidé qu'ils avaient besoin d'un «standard» afin que les logiciels à l'avenir puissent encore lire ces vieux fichiers. Tout cet argument n'a aucun sens puisque PNG correspond à la facture. Mais pour certains clients (comme le gouvernement fédéral), c'est le TIFF au lieu de PNG.Utilisez-le lorsque le client le demande (mais utilisez autrement PNG).

Tout le reste - Obsolète. (Note: Beaucoup ne sont pas d'accord avec moi sur la façon dont les autres formats sont plus petits.) & l'espace disque est presque libre.) Si vous créez un éditeur de bitmap, vous pouvez lire/écrire tous les formats. Mais pour d'autres utilisations - respectez les 2 + 4 formats ci-dessus.

0

Si vous voulez savoir quelque chose au sujet des formats de fichiers ou les algorithmes utilisés, havealookat ces liens.