C++ builder Firemonkey créer une Image avec Bitmap - C++ - Programmation
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
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.
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;
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