2010-10-28 5 views
4

Bonjour j'essaie de changer l'échelle GDIplus :: Bitmap et enregistrer dans la mémoire mise à l'échelle BItmap, et j'ai un problème. J'essaye beaucoup d'échantillon différent, et mon résultat est NULL. Pour l'exemple j'essaye de changer la résolution pour l'image, using SetResolution, aussi j'essaye de convertir le bitmap d'image-> graphique et emploie un des constructeurs GDIplus :: Échelle de Bitmap, mais je n'ai pas de résultat. Par exemple, j'essayer le code suivant:GDIplus Scale Bitmap

Bitmap *bitmap = new Bitmap((int32)width, (int32)height,PixelFormat32bppARGB); 
bitmap=bmp.Clone(0,0,W,H,PixelFormat32bppPARGB); 
mBitmap=(void *)bitmap->Clone(0.0f,0.0f,width,height,PixelFormat32bppPARGB); 

Répondre

0

http://msdn.microsoft.com/en-us/library/e06tc8a5.aspx

Bitmap myBitmap = new Bitmap("Spiral.png"); 
Rectangle expansionRectangle = new Rectangle(135, 10, 
    myBitmap.Width, myBitmap.Height); 

Rectangle compressionRectangle = new Rectangle(300, 10, 
    myBitmap.Width/2, myBitmap.Height/2); 

myGraphics.DrawImage(myBitmap, 10, 10); 
myGraphics.DrawImage(myBitmap, expansionRectangle); 
myGraphics.DrawImage(myBitmap, compressionRectangle); 
+1

la question est sur le point d'obtenir une image bitmap réduite à partir d'un existant. Ne pas dessiner le même bitmap à différentes échelles. – mhcuervo

6

Calculer la nouvelle largeur et la hauteur (si vous avez les facteurs de mise à l'échelle)

float newWidth = horizontalScalingFactor * (float) originalBitmap->GetWidth(); 
float newHeight = verticalScalingFactor * (float) originalBitmap->GetHeight(); 

ou facteurs d'échelle si la nouvelle les dimensions sont connues

float horizontalScalingFactor = (float) newWidth/(float) originalBitmap->GetWidth(); 
float verticalScalingFactor = (float) newHeight/(float) originalBitmap->GetHeight(); 

Créer une nouvelle image vide avec suffisamment d'espace pour l'image à l'échelle

Image* img = new Bitmap((int) newWidth, (int) newHeight); 

Créer un nouveau graphique pour dessiner sur le bitmap créé:

Graphics g(img); 

Appliquer une échelle de transformation aux graphiques et dessiner l'image

g.ScaleTransform(horizontalScalingFactor, verticalScalingFactor); 
g.DrawImage(originalBitmap, 0, 0); 

img est maintenant une autre Bitmap avec une version réduite de l'image originale.

0

Le solution proposed by mhcuervo fonctionne correctement, sauf si l'image d'origine a une résolution spécifique, par exemple si elle a été créée par la lecture d'un fichier image.

Dans ce cas, vous devez appliquer la résolution de l'image originale aux facteurs de mise à l'échelle:

Image* img = new Bitmap((int) newWidth, (int) newHeight); 
horizontalScalingFactor *= originalBitmap->GetHorizontalResolution()/img->GetHorizontalResolution(); 
verticalScalingFactor *= originalBitmap->GetVerticalResolution()/img->GetVerticalResolution(); 

(Note: la résolution par défaut pour une nouvelle Bitmap semble être 96 ppi, au moins sur mon ordinateur)

ou plus, vous pouvez simplement modifier la résolution de la nouvelle image:

Image* img = new Bitmap((int) newWidth, (int) newHeight); 
img->SetResolution(originalBitmap->GetHorizontalResolution(), originalBitmap->GetVerticalResolution());  
Questions connexes