Charger une image depuis un stream... pkoi ca foire avec un TPicture ?

Charger une image depuis un stream... pkoi ca foire avec un TPicture ? - Delphi/Pascal - Programmation

Marsh Posté le 10-07-2003 à 14:25:28    

je m'explique.
 
je suis les instructions de la bas :
 
http://www.delphicollection.com/pu [...] source.htm
 
Effectivement ca marche bien quand j'utilise un TImage.
 
maintenant, j'aimerai charger l'image dans une variable TPicture.
 
je la déclare donc  
 
var
  Form1: TForm1;
  LaunchTestOnPic : TPicture;
 
Et ensuite je lui fait charger le stream :
 
LaunchTestOnPic.Bitmap.LoadFromStream(RS);
 
 
Comme ils ont dit dans le lien.
 
Et pourtant, j'ai une magnifique exception... pourquoi ?

Reply

Marsh Posté le 10-07-2003 à 14:25:28   

Reply

Marsh Posté le 10-07-2003 à 14:26:41    

- c'est quoi l'exception que t'as
- t'as initialisé ton stream comment ?
- t'as initialisé ton TPicture comment ?


Message édité par antp le 10-07-2003 à 14:28:12

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-07-2003 à 14:28:07    

Je fais comme le lien :
 

Code :
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   //We need a stream to read our resource
  4.   RS : TResourceStream;
  5. begin
  6.   //Open resource item named "Clouds"
  7.   RS := TResourceStream.Create(HInstance,'ImageTest',RT_RCDATA);
  8.   try
  9.     //Load our Image from our ResourceStream
  10.     LaunchTestOnPic.Bitmap.LoadFromStream(RS);  //Load the bitmap from our stream
  11.   finally
  12.     //Free the memory used for our stream
  13.     RS.Free;
  14.     end;
  15. end;


 
Je remplace ma variable TPicture  par un Timage.Picture , ca marche impec, c'est la que je calcule pas.
 
J'ai un "Access violation blabla"...

Reply

Marsh Posté le 10-07-2003 à 14:29:01    

ton TPicture il est créé comment ?
 

tetedeiench a écrit :

"Access violation blabla"...


 
blabla = quoi ? parce que parfois les adresses donnent une info utile :D


Message édité par antp le 10-07-2003 à 14:29:30

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-07-2003 à 14:30:38    

euh OK :D
 
'Access Violation at address 00421533 in module "Project1.exe". Read of Address 0000000C'

Reply

Marsh Posté le 10-07-2003 à 14:30:59    

antp a écrit :

ton TPicture il est créé comment ?
 
 
 
blabla = quoi ? parce que parfois les adresses donnent une info utile :D


 
Ben vla mon code en entier, comme ca :D
 

Code :
  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, ExtCtrls, JvSpecialImage, StdCtrls, JvHtControls, JvComponent,
  6.   JvTransBtn, JvTransBtn2, ImgList, JvCtrls, jpeg, JvImage, Buttons,
  7.   JvSpeedButton;
  8. type
  9.   TForm1 = class(TForm)
  10.     JvHTLabel1: TJvHTLabel;
  11.     JvTransparentButton3: TJvTransparentButton;
  12.     JvTransparentButton1: TJvTransparentButton;
  13.     Image1: TImage;
  14.     JvImage1: TJvImage;
  15.     Image2: TImage;
  16.     procedure JvTransparentButton1MouseEnter(Sender: TObject);
  17.     procedure JvTransparentButton1MouseExit(Sender: TObject);
  18.     procedure JvTransparentButton3Click(Sender: TObject);
  19.     procedure FormCreate(Sender: TObject);
  20.   private
  21.     { Private declarations }
  22.   public
  23.     { Public declarations }
  24.   end;
  25. var
  26.   Form1: TForm1;
  27.   LaunchTestOnPic : TPicture;
  28. implementation
  29. {$R *.dfm}
  30. {$R MyRes.Res}
  31. procedure TForm1.JvTransparentButton1MouseEnter(Sender: TObject);
  32. begin
  33. JvHTLabel1.Visible := true;
  34. end;
  35. procedure TForm1.JvTransparentButton1MouseExit(Sender: TObject);
  36. begin
  37. JvHTLabel1.Visible := false;
  38. end;
  39. procedure TForm1.JvTransparentButton3Click(Sender: TObject);
  40. begin
  41. application.terminate();
  42. end;
  43. procedure TForm1.FormCreate(Sender: TObject);
  44. var
  45.   //We need a stream to read our resource
  46.   RS : TResourceStream;
  47. begin
  48.   //Open resource item named "Clouds"
  49.   RS := TResourceStream.Create(HInstance,'ImageTest',RT_RCDATA);
  50.   try
  51.     //Load our Image from our ResourceStream
  52.     LaunchTestOnPic.Bitmap.LoadFromStream(RS);  //Load the bitmap from our stream
  53.   finally
  54.     //Free the memory used for our stream
  55.     RS.Free;
  56.     end;
  57. end;
  58. end.


Message édité par Tetedeiench le 10-07-2003 à 14:31:37
Reply

Marsh Posté le 10-07-2003 à 14:32:10    

Je sais mes variables sont moches mais ce projet est la que pour tester avant d'aller dans le définitf :D

Reply

Marsh Posté le 10-07-2003 à 14:32:39    

tetedeiench a écrit :

Read of Address 0000000C'  


 
pointeur valant nil...
 
je vois pas où tu initialises LaunchTestOnPic
T'as un pointeur et pas un seul create l'assignant


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-07-2003 à 14:34:55    

antp a écrit :


 
pointeur valant nil...
 
je vois pas où tu initialises LaunchTestOnPic
T'as un pointeur et pas un seul create l'assignant


 
euh ouai faudrait ptet  que je fasse un create quelque aprt  effectivement :D

Reply

Marsh Posté le 10-07-2003 à 14:40:44    

Meme  avec le create ca merde.
 
Moi ce que je veux, c'est charger mes bitmaps de mon stream dans des  variables pour pouvoir les  swapper facilement dans mes boutons etc :/

Reply

Marsh Posté le 10-07-2003 à 14:40:44   

Reply

Marsh Posté le 10-07-2003 à 14:44:55    

utilise des TBitmap alors, c'est plus simple que de passer par des TPicture.
Et ensuite tu fais compo.***.Bitmap.Assign(unTBitmap); pour qu'il en copie l'image.


Message édité par antp le 10-07-2003 à 14:45:10

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-07-2003 à 14:46:04    

heu au fait ta ressource RC_DATA là, c'est un bitmap ou un jpeg ?
 
pour charger un bitmap des ressources tu peux faire simplement  
leTBitmap.LoadFromResourceName(HInstance, 'nom')
 
pour un JPEG, fais plutôt
leTJPEGImage.LoadFromStream(...)
 
où leTJPEGImage est un TJPEGImage


Message édité par antp le 10-07-2003 à 14:48:54

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 10-07-2003 à 14:47:57    

Bitmap.
 
meme avec un Tbitmap ca  foire :D  
 
Enfin je m'en suis sorti avec  des  TSTream mais bon :D
 
J'ai fait ca en fait :
 

Code :
  1. procedure TForm1.LoadBitmap (comp : TImage; name : String) ;
  2. begin
  3.   RS := TResourceStream.Create(HInstance,name,RT_RCDATA);
  4.   try
  5.     //Load our Image from our ResourceStream
  6.     comp.Picture.Bitmap.LoadFromStream(RS);  //Load the bitmap from our stream
  7.   finally
  8.     //Free the memory used for our stream
  9.     RS.Free;
  10.   end;
  11. end;


 
Comme cha cha swappe les bitmaps en déléteant les  streams. Et ca a l'air de marcher, donc je croise les doigts :D

Reply

Sujets relatifs:

Leave a Replay

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