2010-10-13 7 views

Répondre

2

Vous ne donnez pas trop d'informations, donc je vais aller avec StretchBlt

Pour un exemple, voir Scaling an Image.

+0

Pouvez-vous fournir une démo en utilisant 'StretchBlt' pour redimensionner? – icurl

+3

L'exemple n'est pas considéré comme ** la solution la plus courte ** IMO. – ollydbg

1

Je ne vais pas vous donner une démo, mais essayer de faire ce qui suit:

  • créer bitmap de destination qui est de votre taille désirée
  • sélectionner ce bitmap dans le contexte de l'appareil
  • StretchBlt bitmap d'origine sur le contexte de l'appareil précédemment mentionné
  • désélectionner bitmap du contexte de l'appareil

Cette recette ci-dessus ne nécessite aucune bibliothèque alors GDI qui est déjà présent dans Windows. Et si vous prévoyez de dessiner quelque chose en C++, vous devriez quand même vous familiariser avec cette bibliothèque.

Regardez ici: http://www.ucancode.net/Free-VC-Draw-Print-gdi-example-tutorial/GDI-Object-VC-MFC-Tutorial.htm

ou ici: http://www.olivierlanglois.net/clover.html

si vous ne prévoyez pas d'utiliser MFC pour la tâche.

+0

Je ne vais jamais utiliser MFC, trop gros – icurl

+0

bien alors, vous devrez utiliser des fonctions GDI natives pour cela –

+0

Avez-vous un exemple simplifié? – icurl

0

L'un des algorithmes de remise à zéro les plus simples est le plus proche voisin. Supposons que vous rééchelonniez à partir d'une image dans un tableau de taille x1 y1 à une autre taille x2 y2. L'idée est de trouver le décalage entier le plus proche dans le tableau original pour chaque position de tableau cible. Donc, votre algorithme de remise à zéro se termine par quelque chose comme ceci:

const int x1 = 512; 
const int y1 = 512; 
const int x2 = 64; 
const int y2 = 64; 
unsigned char orig[x1*y1]; /* Original byte array */ 
unsigned char target[x2*y2] /* Target byte array */ 
for(int i=0;i<x2;i++) 
{ 
    for(int j=0;j<y2;j++) 
    { 
     xoff = (i*x2)/x1; 
     yoff = (j*y2)/y1; 
     target[i+j*x2] = orig[xoff+yoff*x1] 
    } 
} 

Cela donnera une image redimensionnée en bloc. Pour de meilleurs résultats, vous pouvez utiliser un interpolateur polynomial moyen ou tout autre type.

0

Quelles bibliothèques utilisez-vous? Comment représentez-vous les images? La plupart des bibliothèques d'images devraient déjà être capables de le faire, par ex. Qt a QPixmap avec scaled() et GDI a StretchBlt.

Ou vous pouvez le coder vous-même avec bicubic interpolation.

Questions connexes