2009-11-13 7 views
3

problème dans l'élaboration d'une image PNG semi-transparente sur l'objet TBitmap.TBitmap dessin image transparente dans Delphi 2009

Si TBitmap, HandleType est défini sur bmDDB, le canevas est dessiné transparent. Mais le problème est qu'il ne fonctionne pas sur toutes sortes de machines (par exemple: Windows sur les ordinateurs Apple).

Lorsque la propriété HandleType d'un TBitmap est définie sur bmDIB, l'arrière-plan du canevas est dessiné en blanc.

bmp.HandleType := bmDIB; 

J'ai essayé de définir le style de pinceau sur bsClear. Mais il dessine les pixels transparents en couleur noire.

Comment puis-je dessiner une image en préservant sa transparence et ses bords lisses.

Merci Pavan.

Répondre

4

Il est certainement possible de peindre une image bitmap bmDIB avec fond transparent sur une toile:

procedure TForm1.FormPaint(Sender: TObject); 
var 
    Bmp: TBitmap; 
begin 
    Bmp := TBitmap.Create; 
    try 
    Bmp.PixelFormat := pf32bit; 
    Bmp.HandleType := bmDIB; 
    Bmp.Width := 700; 
    Bmp.Height := 400; 
    Bmp.Transparent := TRUE; 
    Bmp.TransparentColor := clMaroon; 

    with Bmp.Canvas do begin 
     Brush.Color := clMaroon; 
     FillRect(Rect(0, 0, Bmp.Width, Bmp.Height)); 

     Brush.Color := clBlue; 
     FillRect(Rect(42, 42, 200, 300)); 
    end; 

    Canvas.Draw(12, 12, Bmp); 
    finally 
    Bmp.Free; 
    end; 
end; 

Notez que tout le bitmap est rempli d'abord avec la couleur définie comme TransparentColor. Mais pour plus de contrôle et de rapidité, vous devriez envisager une solution qui ne dépend pas du GDI (qui implique des capacités de carte graphique et de pilote), comme Graphics32.

+2

+ 1 pour Graphics32 – Runner

+0

Essayer de charger une image PNG qui comporte des pixels semi-transparentes sur les bords d'angle. En utilisant la procédure ci-dessus, ces pixels semi-transparents sont dessinés en couleur noire. – Pavan

+1

@Pavan: Transparent <> semi-transparent. Si vous avez besoin de la valeur alpha par pixel, vous devez soit rester avec un format graphique qui soutient pleinement, ou regarder dans Graphics32. Ou en GDI +. Autant que je sache, il n'y a aucune garantie que vous pouvez faire ce que vous voulez avec GDI et être sûr qu'il fonctionne sur tous les * * systèmes. – mghie