C++ builder Firemonkey créer une Image avec Bitmap

C++ builder Firemonkey créer une Image avec Bitmap - C++ - Programmation

Marsh Posté le 28-09-2017 à 09:46:18    


Bonjour,
 
J'utilise C++ builder starter Firemonkey et j'essaye de créer une Image avec un Bitmap
 
Mon code :
 
Fichier Jeu.cpp
 
//---------------------------------------------------------------------------
 
#include <fmx.h>
 
#pragma hdrstop
 
#include "Jeu.h"
 
#include <string>
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
 
#pragma resource "*.fmx"
 
TForm1 *Form1;
 
TBitmap *MyBitmap; // création d'un Bitmap nommé MyBitmap
 
TImage *NewImage; // création d'un Image nommées NewImage
 
using namespace std;
 
void __fastcall TForm1::Button1Click(TObject *Sender)
 
{
 
Glyph1->ImageIndex =8; // j'ai mis dans le composant Glyph la liste d'images de ImageList1
 
en nommant la propriété Images de Glyph ImageList1
 
MyBitmap = new TBitmap(0,0);
 
MyBitmap->Assign(Glyph1->MakeScreenshot()); // récupère le Bitmap
 
Image1->Bitmap = MyBitmap; // le Bitmap s'affiche bien dans Image1, ça marche
 
// J'aimerais faire pareil avec un Timage et afficher l'image sur l'écran
 
NewImage = new Timage; // cette ligne provoque l'erreur ci-dessous (*)
 
NewImage->Bitmap = MyBitmap;
 
NewImage->Height = 115;
 
NewImage->Width = 80;
 
NewImage->Position->X = 100;
 
NewImage->Position->Y = 100;
 
}
 
(*) - [bcc32 Avertissement] W8123 Le chemin 'C:\Users\Public\Documents\Embarcadero\Studio\18.0\hpp\Win32' est introuvable - chemin ignoré dans l'option '-I'
 
- [bcc32 Erreur] Jeu.cpp(76): E2285 Impossible de trouver une correspondance pour 'TImage::TImage()'
 
- [bcc32 Avertissement] Jeu.cpp(118): W8111 Accès à l'entité 'Graphics::bkSolid' désapprouvée
 
Si je retire cette ligne et que je clique sur Button1, ce message d'erreur apparaît : violation d'accès à l'adresse 00CFD81E dans le module 'fmx240.bpl' Lecture de l'adresse 00000228
 
Si quelqu'un peut m'aider … Merci d'avance

Reply

Marsh Posté le 28-09-2017 à 09:46:18   

Reply

Marsh Posté le 29-09-2017 à 16:55:46    

Bonjour !
 
Tout d'abord, merci de bien vouloir indenter votre code et d'utiliser les balises [code] pour le présenter ...
 
Pour votre problème :
 - Cela plante si vous enlevez la ligne : tout à fait normal, vous définissez un pointeur vers un objet, ne lui assignez pas de valeur et utilisez un attribut dudit objet. Le pointeur vaut ce qu'il y avait en mémoire au moment où vous avez lancé, probablement 0, mais cela peut aussi bien valoir 0x3A7C5209. Et quand vous essayez d'utiliser cette adresse, vous avez une violation d'accès car c'est une zone mémoire à laquelle vous n'avez pas accès => Tout à fait logique. Remarquez que cela aurait pu être pire, car cela aurait pu tomber dans une zone de mémoire à laquelle vous avez accès et cela aurait corrompu la mémoire et aurait sans doute donné, plus tard, des résultats imprévisibles ....
 - La ligne 76 ne compile pas car, comme l'indique le message d'erreur, le(s) constructeur(s) de la classe TImage demande(nt) des paramètres. Pour savoir lesquels, et, éventuellement, quel constructeur utiliser, reportez vous à la documentation de cette classe TImage.
 
Bonne continuation


---------------
On n'est jamais très fort pour ce calcul !
Reply

Marsh Posté le 29-09-2017 à 20:23:30    

Merci Farian pour l'info. Bonne soirée

Reply

Marsh Posté le 02-10-2017 à 20:44:05    

Bonsoir,
 
NewImage = new TImage(Form1); // j'ai mis le owner dans le constructeur de TImage
NewImage->Bitmap = MyBitmap;
 
Image2->Bitmap = NewImage->Bitmap;  
 
delete NewImage ...
 
Ce code fonctionne, le Bitmap est créé et s'affiche, mais il faut passer par Image2.
 
J'aimerais ne pas passer par un autre composant pour l'afficher en utilisant les propriétés suivantes :
 
NewImage->Height = 115;  
NewImage->Width = 80;
NewImage->Position->X = 100;
NewImage->Position->Y = 100;
 
Pas de message d'erreur avec ces lignes de code mais le Bitmap ne s'affiche pas.
 
Est-ce possible ?
 
Merci d'avance.

Reply

Marsh Posté le 03-10-2017 à 17:41:32    

Voici la solution :
NewImage = new TImage(this); // this est Form1 à cause de TForm1::
NewImage->Parent = this; // idem
NewImage->Bitmap = MyBitmap;
NewImage->Height = 115;
NewImage->Width = 80;
NewImage->Position->X = 100;
NewImage->Position->Y = 100;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed