2011-01-02 2 views
1

Je lisais le blog de Scott Guthrie et j'ai rencontré un échantillon. Vous pouvez le trouver dans HerePourquoi les images sont-elles représentées par un tableau d'octets?

Il est utilisé byte array pour représenter Picture dans cet exemple. Je n'ai aucune idée pourquoi il est représenté par byte array. Je me souviens aussi que certains fichiers sont traités comme un tableau d'octets dans .NET Framework aussi. Est-ce que quelqu'un peut m'expliquer pourquoi un tableau d'octets au lieu d'une chaîne ou même une classe qui contient une image?

+0

Pourquoi utiliser une chaîne ou une classe pour représenter un flux de données binaires? – bevacqua

Répondre

3

Une collection d'octets est la manière la plus simple de représenter un fichier image en tant que donnée. Une chaîne ne convient pas car elle contient des codes de caractères et un fichier image ne contient pas de caractères. Il n'y a pas de classe spéciale pour contenir les données d'un fichier image, car un tableau d'octets fonctionne très bien pour cela.

N'importe quel fichier peut être traité comme une collection d'octets, donc un tableau d'octets est le résultat de la lecture d'un fichier en tant que données binaires. Un fichier peut également être décodé comme un format spécifique, comme un fichier texte qui résulte en une chaîne, ou un format d'image compressé (JPEG, GIF, PNG et.c.) qui résulte en un objet Bitmap contenant l'image décompressée.

5

Les images sont des données binaires - elles sont facilement représentées sous forme de tableaux d'octets.

L'image dans l'échantillon est stockée dans la base de données en tant que BLOB - pas une chaîne ou un emplacement, c'est-à-dire, ce sont des données binaires.

1

On gère un bitmap comme un tableau de valeur RVB. Peur chaque pixel, par exemple, chaque valeur R, G et B est codé dans un octet. Vous pourriez également avoir une quatrième valeur qui est la transparence. Jouer avec l'indice de couleur/transparence, la coordonnée x du pixel, et la largeur de l'image pour obtenir les pixels à y coordonnées ... donc on a un accès rapide à l'image entière, au prix bon marché de certains multiplication et un opérateur de tableau [] appel.

De nos jours, l'efficacité peut encore être un problème lorsqu'il s'agit d'images (beaucoup de travail sur chaque pixel, ce qui signifie beaucoup, beaucoup de boucles sur tout le contenu de l'image).

Cela pourrait expliquer que les images soient toujours traitées via des tableaux d'octets.

+0

Les données d'image dans les exemples ne sont cependant pas un bitmap RVB, c'est un format d'image compressé où vous ne pouvez pas accéder directement aux pixels directement. La décompression de l'image à l'aide de moyens normaux n'aboutit pas à un tableau d'octets, mais à un objet 'Bitmap'. – Guffa

+0

@Guffa honte sur moi Je n'ai pas pris le temps de lire l'exemple entier. –

+0

Pourquoi devez-vous ressentir de la honte? La chose que vous avez manquée ne devrait pas être une raison de honte. – Freshblood

Questions connexes