![]() |
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. |
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. |
Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
|
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.
|
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 |
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.
|
Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
Beispiel aus der Hilfe, zum transparenten Zeichnen einer Bitmap.
Code:
Oder suchst du einfach danach -> canvas.brush.style:= bsclear;
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 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 |
Re: Ein Rechteck auf TBitmap.Canvas mit transparenter Farbe?
Zitat:
|
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 ! |
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 10:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz