2010-10-28 8 views
0

J'ai une image représentative d'un Array2D:Comment redimensionner une image en C++?

template<class T = uint8_t> 
Array2D<T> mPixData[4]; ///< 3 component channels + alpha channel. 

Le commentaire est dans la bibliothèque. Je n'ai aucun indice sur l'explication.

Est-ce que quelqu'un:

  1. expliquer quels sont les canaux 3 composante + canal alpha sont sur

  2. montrer comment je pouvais redimensionner cette image sur la base mPixData

+0

Lors du redimensionnement des images, vous devez garder cela à l'esprit, si votre application a besoin: http://www.4p8.com/eric.brasseur/gamma.html – bjoernz

Répondre

2

Sans savoir quelle bibliothèque c'est, voici un coup de couteau dans l'obscurité:

  1. La définition de type implique qu'il crée un tableau 2D de caractères non signés (vous permettant de stocker des valeurs jusqu'à 255.

    template<class T = uint8_t> Array2D<T>

  2. Ensuite, mPixData lui-même est un tableau, ce qui implique que, à chaque coordonnée, vous avez quatre valeurs (octets à contrer), 3 pour les couleurs (disons RGB, mais pourrait être autre chose) et 1 pour Alpha.

  3. L '"image" est fondamentalement ce tableau tridimensionnel. Vraisemblablement, lorsque vous chargez du contenu, il redimensionne à l'entrée - ce que vous devez faire est de trouver une forme d'algorithme de redimensionnement (pas un expert en traitement d'image, mais je suis sûr que google révélera quelque chose), ce qui vous permettra ces données et faites ce que vous avez besoin ...

1

1) Canaux à 3 composants - Canaux Red Green Blue. canal alpha raconte la transparence de l'image

2) Il existe de nombreux algorithmes que vous pouvez utiliser pour redimensionner l'image. Le plus simple serait de rejeter les pixels supplémentaires. Une autre méthode simple consiste à effectuer une interpolation.

1

Les canaux à 3 composants représentent les canaux Red Green Blue (également appelés RGB). La 4ème chaîne, ALPHA, est le canal de transparence.

Un pixel est défini par mPixData[4]

mPixData[0] -> R 
mPixData[1] -> G 
mPixData[2] -> B 
mPixData[3] -> A 

Par conséquent, une image peut être représentée par un vecteur ou une matrice de mPixData [4]. Comme vous l'avez déjà dit, dans ce cas est Array2D<T> mPixData[4];

Resize/rescale/resample an image n'est pas un processus trivial. Il y a beaucoup de matériel disponible sur le web à ce sujet et je pense que vous devriez envisager d'utiliser une bibliothèque pour le faire. Vérifiez CxImage (Windows/Linux).

Il y a du code here mais je ne l'ai pas testé. Vérifiez la fonction resample().

1

Hi les 3 canaux sont le canal rgb + alpha. Donc les canaux verts et bleus rouges et le canal alpha. Il existe plusieurs méthodes de réduction d'échelle. Vous pourriez prendre par exemple tous les 4 pixels, mais le résultat serait plutôt mauvais, jetez un oeil à différentes méthodes d'interpolation, par exemple: http://en.wikipedia.org/wiki/Bilinear_interpolation.

Ou si vous voulez utiliser une utilisation de la bibliothèque: http://www.imagemagick.org/Magick++/

ou comme mentionné par karlphillip: http://www.xdp.it/cximage.htm

Questions connexes