Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe? (https://www.delphipraxis.net/32063-ein-rechteck-auf-tbitmap-canvas-mit-transparenter-farbe.html)

ak1 18. Okt 2004 11:00


Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Hallo Leute,

ich habe auf einem TBitmap-Objekt mit Canvas etwas gezeichnet. Nun möchte ich anschließend mit
Bitmap.Canvas.FillRect(...); ein Rechteck in transparenter Farbe über das bereits gemalte zeichnen Wie kann ich das machen?
Ich bekomme keine transparente Farbe hin.

Ben1 18. Okt 2004 12:00

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Unterstützt Canvas eigentlich einen Alphachannel ?
Ich glaube nicht.
Schau dir mal die Canvas-Eigenschaft CopyMode in der Hilfe an. Damit kannst du logische Operationen zwischen Bildinhalten erzeugen. OR sieht fast wie Transparenz aus. Ansonsten hast du immer noch die Möglichkeit dir dein Fillrect selbst zu schreiben indem du dann jeden Pixel des Ursprungbildes ausliest, mit der zusätzlichen Farbe verrechnest und ihn neu setzt. SO kannst du problemlos beliebige Transparenzeffekte erzeugen, wenn du nur die passende Formel dafür hast.

Steve 18. Okt 2004 12:04

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Delphi-Referenz durchsuchenFrameRect ist evtl. Dein Freund :?: :)

Gruß
Stephan :dance:

ak1 18. Okt 2004 12:29

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Sorry, leider helfen mir eure Tips nicht weiter. Ein eigenes Fillrect zu programmieren wäre mir auch zu aufwändig.

Steve 18. Okt 2004 12:43

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Hab ich Dich da überhaupt richtig verstanden..?

Du willst n Rechteck malen, aber nicht wie bei FillRect ausgefüllt, sondern der Inhalt soll transparent sein, d.h. nur der Rahmen sichtbar?
Oder soll das Rechteck nur teilweise transparent sein? (Bestimmter Bereich, oder wie bei z.B. Office 'halbtransparent', oder was denn nun....)?? :?:
Fragen über Fragen -g-

Gruß
Stephan

ak1 18. Okt 2004 12:51

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Sagen wir es so: Ich habe etwas mit Bitmap.Canvas gezeichnet. Jetzt möchte ich im Anschluss daran mit einem transparenten farbigen Rechteck einen bestimmten Teil dieser Zeichnung markieren. Dabei soll die Zeichnung an der Stellen nicht überdeckt werden, weshalb das Rechteck mit transparenter Farbe gefüllt wird.

Ben1 18. Okt 2004 12:51

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Beispiel aus der Hilfe, zum transparenten Zeichnen einer Bitmap.

Code:
procedure TForm1.Button1Click(Sender: TObject);

var
  Bitmap : TBitMap;
begin
  Bitmap := TBitmap.Create;
  try
    with Bitmap do begin
      LoadFromFile('C:\Program Files\Common Files\Borland Shared\Images\Splash\256color\factory.bmp');
      Transparent := True;
      TransParentColor := BitMap.canvas.pixels[50,50];
      Form1.Canvas.Draw(0,0,BitMap);
      TransparentMode := tmAuto;
      Form1.Canvas.Draw(50,50,BitMap);
    end;
  finally
    Bitmap.Free;

  end;
end
Oder suchst du einfach danach -> canvas.brush.style:= bsclear;
Das zeichnet das nächste Objekt ohne Inhalt, nur den Rahmen.

Wenn du Durchscheineffekte haben willst dann nur über ein OR des Bildschirminhaltes oder manuelle Pixelmanipulation

ak1 18. Okt 2004 14:18

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Zitat:

Zitat von ak1
Sagen wir es so: Ich habe etwas mit Bitmap.Canvas gezeichnet. Jetzt möchte ich im Anschluss daran mit einem transparenten farbigen Rechteck einen bestimmten Teil dieser Zeichnung markieren. Dabei soll die Zeichnung an der Stellen nicht überdeckt werden, weshalb das Rechteck mit transparenter Farbe gefüllt wird.

Na, hat niemand eine Idee?

Ben1 18. Okt 2004 14:48

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Nur weil dir die Ideen zu aufwendig sind kannst du doch nicht gleich behaupten das keiner eine hat.
Das was du willst ist typisches Alphablending, etwas das nunmal von vielen Anwendungen nicht automatisch unterstützt wird.

Es ist doch nicht weiter schwer alle Pixel im Bereich durchzulaufen und für jeden nach einer simplen Formel den neuen Farbwert zu berechnen.

Und so geht das :

alte Farbe(Rd, Gd, Bd)
überdeckende Farbe (Rs, Gs, Bs)
A= Alphachannel = transparens der Farbe in %, 0 bis 1

Die neue Farbe ergibt sich dann so :

rot = Rs * A + Rd * (1 - A)
grün = Gs * A + Gd * (1 - A)
blau = Bs * A + Bd * (1 - A)

um deine Farben in die rot, grün und blau Anteile zu zerlegen und wieder zusammen zu fügen gibt es fertig Funktionen (siehe Hilfe RGB).
Das zu programmieren ist eine Sache von vielleicht 10 Minuten !

ak1 18. Okt 2004 15:03

Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
 
Wenn man weiss wie es geht, dann dauert es vielleicht nur 10 Minuten.
Bin in der Grafikprogrammierung aber nicht so bewandt. Werde mir das mal genauer anschauen.

Ein wenig Beispiel-Quellcode wäre ein super feiner Zug.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:15 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz