FAQ C++/CLI et VC++.Net

FAQ C++/CLI et VC++.NetConsultez toutes les FAQ
Nombre d'auteurs : 29, nombre de questions : 248, création le 22 février 2013
Sommaire→Intéraction du C++/CLI avec le framework .Net→GDI
Cette définition est tirée de MSDN
Le Common Language Runtime recourt à une implémentation avancée de l'interface graphique (GDI, Graphics Design Interface) Windows, appelée GDI+. GDI+ vous permet de créer des graphiques, de dessiner du texte et de manipuler des images graphiques en tant qu'objets. Cette interface est conçue pour allier performances et simplicité d'utilisation. Vous pouvez l'utiliser en vue du rendu des images graphiques sur des Windows Forms et des contrôles. GDI+ a entièrement remplacé GDI et constitue aujourd'hui la seule option disponible pour le rendu des graphiques par programme dans les applications Windows Forms.
Lien : Graphiques GDI+
Ce code permet de réaliser simplement une capture d'écran de la fenêtre active et de l'écran en entier.
Le principe est de simuler l'appui sur la touche "Impr écran" puis de récupérer l'image obtenue dans le Presse-Papier. Pour l'exemple donné ci-dessous, les résultats sont affichés dans 2 PictureBox : PBWindow, PBScreen après le click sur un Button BPrint.
private: System::Void BPrint_Click(System::Object^ sender, System::EventArgs^ e)
{
Bitmap^ screen;
Bitmap^ window;
// simuler l'appui de la touche PrintScreen
System::Windows::Forms::SendKeys::SendWait("{PRTSC}");
// récupérer l'image obtenue dans le Presse-Papier
window = safe_cast<Bitmap^>(Clipboard::GetDataObject()->GetData("Bitmap"));
// attribuer l'image à PBWindow
PBWindow->Image = window;
// simuler le PrintScreen enrichi
System::Windows::Forms::SendKeys::SendWait("+{PRTSC}");
// récupérer l'image obtenue dans le Presse-Papier
screen = safe_cast<Bitmap^>(Clipboard::GetDataObject()->GetData("Bitmap"));
//attribuer l'image à PBScreen
PBScreen->Image = screen;
}Voici une méthode permettant de convertir une image (ici au format Jpeg) en un tableau de bytes :
static array<unsigned char> ^ Image2ByteArray(Image ^img)
{
try
{
MemoryStream ^mstImage = gcnew MemoryStream();
img->Save(mstImage, System::Drawing::Imaging::ImageFormat::Jpeg);
array<unsigned char> ^ bytImage = mstImage->GetBuffer();
return bytImage;
}
catch(Exception ^)
{
return nullptr;
}
}Voici une méthode permettant de convertir une image (ici au format Jpeg) en un tableau de bytes :
static Image ^ByteArray2Image(array<unsigned char> ^ BArray)
{
try
{
MemoryStream ^mstImage = gcnew MemoryStream(BArray);
Image ^img = Image::FromStream(mstImage);
return img;
}
catch(Exception ^)
{
return nullptr;
}
}


