JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 2010
-
2 oct. 2009 à 09:25
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 2010
-
10 oct. 2009 à 21:51
hello
je cherche a faire une form avec canal alpha avec une image .png
avec un morceau de code d'une splashform j'ai obtenu quelquechose de proche mais pas moyen de la modifier correctement.
Les 2 soucis :
- le code va chercher dans le .res l'image au lieu d'une .png
- le code ne permets pas d'ajouter des compos sur la form ...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 2 oct. 2009 à 11:55
Salut,
je sais pas si j'ai bien compris ta demande mais si tu veux charger un fichier png à la place d'une ressource png alors c'est très simple.
Voici un exemple qui modifie la procedure Execute de la version GDI+:
[hr] ...
Bitmap := TBitmap.Create;
[b]try
/b //Create and load a GDI+ bitmap from the File
PNGBitmap : = TGPBitmap.Create('splash.png');
[b]try
/b//Convert the PNG to a 32 bit bitmap
PNGBitmap.GetHBITMAP(MakeColor(0,0,0,0), BitmapHandle);
// Wrap the bitmap in a VCL TBitmap
Bitmap.Handle := BitmapHandle;
[b]finally
/bPNGBitmap.Free;
end ;
[i](*
// Load the PNG from a resource
Stream : = TResourceStream.Create(HInstance, 'SPLASH', RT_RCDATA);
try
// Wrap the VCL stream in a COM IStream
StreamAdapter := TFixedStreamAdapter.Create(Stream);
try
// Create and load a GDI+ bitmap from the stream
PNGBitmap := TGPBitmap.Create(StreamAdapter);
try
// Convert the PNG to a 32 bit bitmap
PNGBitmap.GetHBITMAP(MakeColor(0,0,0,0), BitmapHandle);
// Wrap the bitmap in a VCL TBitmap
Bitmap.Handle := BitmapHandle;
finally
PNGBitmap.Free;
end;
finally
StreamAdapter := nil;
end;
finally
Stream.Free;
end;
*)/i
ASSERT(Bitmap.PixelFormat = pf32bit, 'Wrong bitmap format - must be 32 bits/pixel');
// Perform run-time premultiplication
PremultiplyBitmap(Bitmap);
...
[hr]
et ça fonctionne
le reste j'ai pas encore regardé
mais je ne vois pas l'intérêt de passer par une image PNG si c'est pour le convertir en Bitmap ... tu pouvais passer directement par un Bitmap 32bit !!!
[hr]@+Cirec
[hr]
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 2 oct. 2009 à 13:10
en ce qui concerne l'ajout de composant sur la fiche
tu peux oublier cette possibilité avec la méthode employée ... en effet, par cette méthode, la fiche est mise en transparence (composant compris) et est utilisée pour afficher progressivement le bitmap mais durant toute cette opération, jusqu'à la fermeture, la fiche reste transparente. Du coup on ne peu pas voir les composants !!!
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 2 oct. 2009 à 16:30
Tu veux dire que si je pose un TImage, que je charge mon PNG qui contient un canal alpha, que je mets la form en "transparent=true" et "bsnone", ma form sera comme je souhaite ?
Si c'est ça, j'ai vraiment cherché loin -_-
je check ça des que possible . merci
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 4 oct. 2009 à 22:30
Je viens de tester, deja, ya pas de "transparent=true" sur une form mais "transparentcolor" DONC je dois choisir une couleur et donc ... je me retrouve avec du transparent type GIF au lieu d'un canal alpha type PNG :/
Existe il donc une solution simple pour obtenir une form qui épouse une PNG dont son canal alpha ?
merci
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 5 oct. 2009 à 17:49
Punaise de punaise je ne parviens pas du tout à le faire et je n'arrive pas à croire que personne n'ai une source la dessus sur le net !
Google me trahis cette fois !!!
sinon de mon coté j'ai pu tester (un peu) et j'en arrive aux mêmes conclusions.
néanmoins il reste une dernière possibilité ... c'est encore du "bricolage" mais elle me parait moins alambiquée que celle de neo022.
le principe serait de faire une fausse transparence (faire une copie de l'arrière plan) que l'on dessinera sur le canvas de la fiche, ce qui donnera l'impression de transparence et de dessiner par dessus (avec un canal Alpha) notre image BMP (tirée d'un PNG où non peu importe).
Le résultat final sera le même à ceci prêt que les composants posés sur la fiche resteront visibles et utilisables
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 10 oct. 2009 à 21:51
Merci je vais regarder son code...
Pour l'autre fausse transparence : j'en avais fait une source que j'ai moi même supprimé car je me suis limite faire déchirer ^^