2009-03-02 4 views
0

Je travaille avec Via Builder, de Inscriber Technology. Cette application fusionne une animation de séquence TGA en un seul fichier .via, ce qui rend beaucoup mieux le chargement de grandes séquences, car ce fichier est optimisé. Il existe des plugins pour l'utiliser avec certains produits Adobe.Inscriber Technology Via Builder et Delphi - Support du canal Alpha

Je travaille sur Delphi, et mon problème est que je ne peux pas récupérer le canal alpha d'origine à partir des images. Grâce à leur bibliothèque VIACODECLib_TLB, j'ai la fonction suivante:

function GetFrameBitmap(Frame: Integer): Integer; 

de tha interface IViaFile. Cette fonction est supposée renvoyer un handle à une image bitmap d'image de la séquence d'origine. Le code suivant pourrait fonctionner:

viaObject: IViaFile; 
bmp: TBitmap; 
index: Integer; 

bmp.Handle := ViaObject.GetFrameBitmap(index); 

Mais le bitmap résultant est la trame d'origine sans canal alpha. En fait, son canal alpha est nul pour toute l'image.

En supposant que je faisais quelque chose de mal, j'ai essayé d'utiliser la fonction GetDIBits, pour être sûr qu'il y avait un canal alpha quelque part. J'ai donc alloué de la mémoire assez longtemps pour stocker le bitmap en supposant qu'il avait 4 canaux et utilisé la fonction GetDIBits. J'ai obtenu le même résultat qu'auparavant: image normale, canal alpha zéro pour toute l'image. Il suffit de noter que Inscriber (dont les forums sont morts), affirme que son Via Builder a un support alpha complet. Je connais quelqu'un qui a réussi à charger les cadres correctement, en C++, en utilisant la fonction GetDIBits, mais "traduire" le code en Delphi n'a pas fonctionné.

Toute aide serait grandement appréciée.

Merci.

Répondre

0

Je vous suggère de regarder de plus près le code C++ de votre collègue supposé fonctionner. Vous avez probablement manqué un détail. Quelle était la part de code de l'API Windows et quelle était la part du code graphique spécifique au fournisseur? Les choses de l'API devraient être un jeu d'enfant à traduire en Delphi.

Vous pouvez constater que la classe TBitmap de Delphi ne prend pas en charge la transparence, vous devrez donc utiliser une autre bibliothèque de support graphique au lieu de GDI simple. Mais si vous récupérez les données bitmap brutes comme avec GetDIBits, vous devriez au moins pouvoir voir que les données de canal alpha sont là. (Vous auriez encore besoin de trouver un moyen d'afficher le bitmap correctement, mais au moins vous sauriez que vous aviez les bonnes données pour commencer.)

+0

Salut, merci d'avoir répondu. J'ai oublié de mentionner que j'utilise une bibliothèque graphique supportant l'alpha blending (GR32). En utilisant le GetDIBits, je copie juste le tableau d'octets retourné par la fonction, et le résultat est l'image originale avec le canal alpha tout mis à zéro. Je vais regarder le code C++ à nouveau. Merci. – Rafael

Questions connexes