2014-05-22 4 views
0

J'ai deux composants TJvImage sur mon formulaire principal. Un est chargé au moment du design à partir d'un fichier PNG partiellement transparent. L'autre est plus petit que le premier et devant lui. Il est chargé à l'exécution avec un autre fichier PNG partiellement transparent.Delphi 2007 - Chargement de TJvImage à partir d'un fichier PNG perd de la transparence

JvImage1.Picture.LoadFromFile ('Logo.png') ; 

JvImage1.Transparent a la valeur TRUE. Le problème est simple: la plus petite image est rendue en ignorant le canal alpha - c'est-à-dire qu'elle extrait l'image d'arrière-plan.

Cela ne se produit pas lorsque je charge les deux images au moment de la conception. Ils sont tous deux partiellement transparents sur le formulaire et s'affichent correctement lorsque j'exécute le programme. Le vrai dilemme est qu'un programme de test minimal écrit pour essayer de démontrer le problème pas montre le problème, mais le même code dans l'application proprement dite ne se comporte pas.

Y a-t-il quelque chose sur la forme principale sous-jacente qui pourrait affecter le comportement?

+1

Je vous suggère d'isoler le problème. Dénudez le code défaillant jusqu'à ce que cela fonctionne. Regardez le fichier dfm. Pourquoi avez-vous défini Transparent sur Vrai? Votre image a un canal alpha. –

+0

Je n'aurais jamais imaginé que vous deviez régler 'Transparent' sur FALSE pour que la transparence fonctionne. Maintenant je sais! (l'aide indique: "Définissez Transparent sur true pour permettre aux objets derrière l'objet TImage de s'afficher à travers l'arrière-plan de l'image. Définissez Transparent sur false pour rendre l'arrière-plan de l'image opaque"). Malheureusement, définir Transparent sur false ne résout pas le problème. J'ai essayé de créer un projet et de coller tout le contenu du formulaire incriminé, et les images s'affichent correctement. J'ai un peu de travail devant moi. – rossmcm

Répondre

1

Je ne sais pas si c'est la même chose pour TJvImage mais lorsque vous définissez la propriété Transparent de TImage sur True, TImage ignore le rendu de tout pixel avec TransparentColor. Si aucune couleur transparente n'est définie, la couleur du pixel inférieur gauche est utilisée. Lorsque ce mode est activé, TImage ne prend pas en compte le canal alpha. Infact Transparency ne fonctionne que lorsque vous chargez l'image typée TBitmap dans TImage.

Je pense que TJvImage fonctionne probablement de la même manière. Donc, pour afficher correctement votre image, vous devez définir la propriété Transparent sur False. Cela permettra probablement à TJvImage de rendre votre image en utilisant la transparence Alpha qui est encodée sur l'image elle-même.

Questions connexes