![]() |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Hallo!
Danke für den Tipp. Leider war nichts mit GBlur zu finden in der Suchfunktion! Habe ich was falsches eingegeben??? |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Zitat:
![]() |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
OK, vielen Dank!
Bleibt mir noch unklar, wie ich die 3 Bilder miteinander verschmelzen kann!??? werde aber mal wieder die suchfunktion bedienen! |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Wenn es keine geeignete Einstellungen von BitBlt gibt, wirst du wohl oder übel eine eigene Prozedur über Scanline schreiben müssen.
Ein Beispiel für Textur + Schatten:
Delphi-Quellcode:
procedure foo(bSource, bDest: TBitmap); //Der Schatten ist die Quelle, die Textur das Ziel
var pSource, pDest: PRGBQuad; begin bSource.PixelFormat:=pf32bit; bDest.PixelFormat:=pf32bit; [...] pDest^.rgbtRed:=pDest^.rgbtRed-(255-pSource^.rgbtRed); pDest^.rgbtBlue:= [...] // Wenn der Pixel in der Schatten-Bitmap weiß ist, wird an bSource nichts verändert, sonst eben dunkler end; |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Hallo Sebastian!
Also Text mit Schatten habe ich nun schon so gelöst:
Delphi-Quellcode:
Ist erstmal nur ein statischer Test gewesen, sah aber im Ergebnis nicht schlecht aus!
Image3.Canvas.Font := Schatten.Font;
Image3.Canvas.Brush.Style := bsClear; Image3.Canvas.TextOut(24 , 7, ed_text.Text); BmpGBlur(Image3.Picture.Bitmap,3); Image3.Canvas.Font := FontDialog1.Font; Image3.Canvas.Brush.Style := bsClear; Image3.Canvas.TextOut(22 , 6, ed_text.Text); BmpGBlur(Image3.Picture.Bitmap,0.05); Irgendwie sehen aber meine Buttons noch zu Flach aus! |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Ich hatte eigentlich die Buttontextur an sich (oder eben einfach ne einfarbige fläche) + die Schattierungen am Rand des Buttons (für den Tiefeneffekt) gemeint :wink: .
|
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Ups!
Na wenn das nicht ein klassisches Mißverständnis war... Also so richtig verstanden habe ich das noch nicht, wie das zum Einsatz, kommt, werde es mir aber mal ansehen und etwas damit "experimentieren", vermute aber, dass ich in ein TImage ein Graik laden soll, oder in ein Bitmap, wie auch immer und dann deine Procedure darauf anwenden soll. Mal sehen, wie weit ich komme...vielen Dank... |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Hi Sebastian!
Also ich habe mal Deinen Code probiert, bin aber leider gescheitert.
Delphi-Quellcode:
Also ich habe Deine Prozedur nun etwas vervollständigt. Sollte bestimmt eine kleine Aufgabe für mich sein. Ich rufe nun diese Prozedure wie folgt auf.
procedure foo(bSource, bDest: TBitmap); //Der Schatten ist die Quelle, die Textur das Ziel
var pSource, pDest: PRGBQuad; begin bSource.PixelFormat:=pf32bit; bDest.PixelFormat:=pf32bit; pDest^.rgbRed := pDest^.rgbRed-(255-pSource^.rgbRed); pDest^.rgbBlue := pDest^.rgbBlue-(255-pSource^.rgbBlue); pDest^.rgbGreen := pDest^.rgbGreen-(255-pSource^.rgbGreen); // Wenn der Pixel in der Schatten-Bitmap weiß ist, wird an bSource nichts verändert, sonst eben dunkler end;
Delphi-Quellcode:
In Image befindet sich ein Jpeg, deshalb weise ich es vorher noch einem Bitmap zu. Allerdings tut sich in dest - dem Image1 nichts. Wie auch. Ich glaube, dass in der foo-procedure noch nichts zurückgeschrieben wird. Oder??? Kannst Du noch etwas helfen?
procedure TForm1.Button1Click(Sender: TObject);
var MyBit:TBitmap; begin myBit:=TBitmap.Create; MyBit.Assign(Image.Picture.Graphic); foo(MyBit,Image1.Picture.Bitmap); end; |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Du solltest dir mal ein Tutorial über Pointer und Scanline suchen. Am Anfang hat das geklungen, als ob du eine eigene Render-Engine zusammenbauen wolltest, deahlb habe ich gedacht, ScanLine wäre kein Problem :wink: .
Schon länger nichts mehr mit ScanLine gemacht, das sollte es aber sein:
Delphi-Quellcode:
procedure foo(bSource, bDest: TBitmap); //Der Schatten ist die Quelle, die Textur das Ziel
var pSource, pDest: PRGBQuad; x, y: Integer; begin bSource.PixelFormat:=pf32bit; bDest.PixelFormat:=pf32bit; for y:=0 to bDest.Height-1 do begin pSource:=bSource.Scanline[y]; pDest:=bDest.Scanline[y]; for x:=0 to Bitmap.Width-1 do begin pDest^.rgbRed := pDest^.rgbRed-(255-pSource^.rgbRed); pDest^.rgbBlue := pDest^.rgbBlue-(255-pSource^.rgbBlue); pDest^.rgbGreen := pDest^.rgbGreen-(255-pSource^.rgbGreen); // Wenn der Pixel in der Schatten-Bitmap weiß ist, wird an bSource nichts verändert, sonst eben dunkler Inc(pDest); Inc(pSource) end end end; |
Re: Eine 3D-Buttongrafik mittels 2D-Technik
Hallo Sebastian!
Also ich bin leider kein Experter mit BitBlt und Scanline! Das mit dem Tut zu diesem Thema ist keine schlechte Idee. Naja ich denke, dass wir uns da wohl etwas missverstnanden haben. Eine eigene Engine wäre wohl für meinen Kenntnisstand etwas zu hochgegriffen. Ich würde mir zwar gern einen eigenen Button-Creator erstellen, aber ich denke, dass ich da wohl weiter davon entfernt bin, als mir lieb ist und ich habe in nunmehr 3 Foren keine Infos erhalten, wie ich ein solches Tool, wie es z.B. Crystal-Button, mit verstehbaren Mitteln erstellen kann. Und was die foo-procedure angeht. Die tuts nun. Was auch immer sie machen soll, sie macht nicht das, wovon ich dachte, dass sie es tun würde...alles bleibt flach...danke ciao |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 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