Condividi tramite


Disegno, posizionamento e clonazione delle immagini

È possibile usare la classe Image per caricare e visualizzare immagini raster (bitmap) e immagini vettoriali (metafile). Per visualizzare un'immagine, sono necessari un oggetto Graphics e un oggetto Image . L'oggetto Graphics fornisce il metodo Graphics::D rawImage , che riceve l'indirizzo dell'oggetto Image come argomento.

Nell'esempio seguente viene creato un oggetto Image dal file Climber.jpg e quindi viene visualizzata l'immagine. Il punto di destinazione per l'angolo superiore sinistro dell'immagine (10, 10) viene specificato nei parametri del secondo e terzo parametro del metodo Graphics::D rawImage .

Image myImage(L"Climber.jpg");
myGraphics.DrawImage(&myImage, 10, 10);

Il codice precedente, insieme a un particolare file, Climber.jpg, ha prodotto l'output seguente.

screenshot di una finestra contenente una foto

È possibile costruire oggetti Image da diversi formati di file grafici: BMP, GIF, JPEG, Exif, PNG, TIFF, WMF, EMF e ICON.

Nell'esempio seguente vengono creati oggetti Image da diversi tipi di file e quindi vengono visualizzate le immagini.

Image myBMP(L"SpaceCadet.bmp");
Image myEMF(L"Metafile1.emf");
Image myGIF(L"Soda.gif");
Image myJPEG(L"Mango.jpg");
Image myPNG(L"Flowers.png");
Image myTIFF(L"MS.tif");

myGraphics.DrawImage(&myBMP, 10, 10);
myGraphics.DrawImage(&myEMF, 220, 10);
myGraphics.DrawImage(&myGIF, 320, 10);
myGraphics.DrawImage(&myJPEG, 380, 10);
myGraphics.DrawImage(&myPNG, 150, 200);
myGraphics.DrawImage(&myTIFF, 300, 200);

La classe Image fornisce un metodo Image::Clone che è possibile usare per creare una copia di un oggetto Image, Metafile o Bitmap esistente. Il metodo Clone viene sottoposto a overload nella classe Bitmap e una delle varianti include un parametro di rettangolo di origine che è possibile usare per specificare la parte dell'immagine originale da copiare. Nell'esempio seguente viene creato un oggetto Bitmap clonando la metà superiore di un oggetto Bitmap esistente. Vengono quindi visualizzate entrambe le immagini.

Bitmap* originalBitmap = new Bitmap(L"Spiral.png");
RectF sourceRect(
   0.0f,
   0.0f, 
   (REAL)(originalBitmap->GetWidth()), 
   (REAL)(originalBitmap->GetHeight())/2.0f);

Bitmap* secondBitmap = originalBitmap->Clone(sourceRect, PixelFormatDontCare);

myGraphics.DrawImage(originalBitmap, 10, 10);
myGraphics.DrawImage(secondBitmap, 100, 10);

Il codice precedente, insieme a un particolare file, Spiral.png, ha prodotto l'output seguente.

illustrazione di un'immagine, seguita dalla metà superiore dell'immagine orignale