Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap32 auf ZielBitmap32 malen (https://www.delphipraxis.net/117988-bitmap32-auf-zielbitmap32-malen.html)

DeddyH 31. Jul 2008 15:32

Re: Bitmap32 auf ZielBitmap32 malen
 
Die Beispiele sind alles Delphi-Übersetzungen der Orginal-Microsoft-Beispiele. Zum Thema Transparenz z.B. dieses.

stOrM 31. Jul 2008 15:35

Re: Bitmap32 auf ZielBitmap32 malen
 
Zitat:

Zitat von DeddyH
Die Beispiele sind alles Delphi-Übersetzungen der Orginal-Microsoft-Beispiele. Zum Thema Transparenz z.B. dieses.

Ja ich kuck grad, dass problem fängt ja schon damit an das ich nicht weiss was ich alles brauche? Vorallem das RoundRect geht glaub ich nicht oder? Hab nix gefunden dazu bisher :-(

DeddyH 31. Jul 2008 15:41

Re: Bitmap32 auf ZielBitmap32 malen
 
Zur Not würde es wohl auch über eine Region gehen, denke ich.

stOrM 31. Jul 2008 15:44

Re: Bitmap32 auf ZielBitmap32 malen
 
Zitat:

Zitat von DeddyH
Zur Not würde es wohl auch über eine Region gehen, denke ich.

PM!

Medium 31. Jul 2008 22:14

Re: Bitmap32 auf ZielBitmap32 malen
 
Wenn ich eines nicht leiden mag, dann sind es mitten drin per PN weitergeführte Diskussionen. Ich kann mir gut vorstellen, dass das was ihr noch bequatscht durchaus von allgemeinem Interesse sein könnte.

Ich z.B. hab mich mit GDI+ auch noch nicht beschäftigt, und wäre interessiert an Details zu diesem und jenem.

stOrM 1. Aug 2008 06:56

Re: Bitmap32 auf ZielBitmap32 malen
 
Zitat:

Zitat von Medium
Wenn ich eines nicht leiden mag, dann sind es mitten drin per PN weitergeführte Diskussionen. Ich kann mir gut vorstellen, dass das was ihr noch bequatscht durchaus von allgemeinem Interesse sein könnte.

Ich z.B. hab mich mit GDI+ auch noch nicht beschäftigt, und wäre interessiert an Details zu diesem und jenem.

Nein, das sollte definitiv kein Ausschluß sein! Das war mehr privat, daher wollte ich nicht diesen Thread hier als Chat missbrauchen! GDI+ Weiß ich selber nicht ob das eine Alternative wäre, zu mal ich mich damit noch weniger auskenne, als wie mit Graphics32. Aber ich denke das dies eine alternative sein könnte, wenn ich mir die Ribbons von Devexpress ansehe, ist dort ja auch alles mit GDI+ gezeichnet?! Von daher hab ich nur mal laut nachgedacht.

Was mich immer noch interessieren würde betrifft dein letztes posting, meinst Du du könntest mal ein kleines Beispiel machen in meinem Projekt damit ich das auch mal verstehe, bzw. sehe wie Du dir das gedacht hast, ich muß das mal vor Augen haben um das zu verstehen.

Jedoch egal wie die Sache ausfällt, wenn ich eine Komponente entwickeln sollte aus diesem Thema stell ich sie eh der allgemeinheit zur Verfügung inkl. Source, da kann dann eh jeder sehen was ich wie gemacht hab, ob nun mit GDI+ oder ohne.

Viele Grüße
Marc

turboPASCAL 1. Aug 2008 09:42

Re: Bitmap32 auf ZielBitmap32 malen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ein wenig gebastelt.

... und bitte nicht so etwas, da wird mir ...

Code:
[b]procedure[/b] TForm1.[color=#ff005f]ListBox1DrawItem[/color](Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
[color=#00D000]//...[/color]
[b]begin[/b]
  SelectionLeft := TBitmap32.Create;
  SelectionMiddle := TBitmap32.Create;
  SelectionRight := TBitmap32.Create;

  [color=#ff0000]LoadPNGintoBitmap32(SelectionLeft, ExtractFilePath(ParamStr(0)) + 'leftw.png', Alpha);[/color] [color=#00D000]// <--<<[/color]
  [color=#00D000]//...[/color]
ich hoffe das war nur für das Demo.

stOrM 1. Aug 2008 09:48

Re: Bitmap32 auf ZielBitmap32 malen
 
Zitat:

Zitat von turboPASCAL
So, ein wenig gebastelt.

... und bitte nicht so etwas, da wird mir ...

Code:
[b]procedure[/b] TForm1.[color=#ff005f]ListBox1DrawItem[/color](Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
[color=#00D000]//...[/color]
[b]begin[/b]
  SelectionLeft := TBitmap32.Create;
  SelectionMiddle := TBitmap32.Create;
  SelectionRight := TBitmap32.Create;

  [color=#ff0000]LoadPNGintoBitmap32(SelectionLeft, ExtractFilePath(ParamStr(0)) + 'leftw.png', Alpha);[/color] [color=#00D000]// <--<<[/color]
  [color=#00D000]//...[/color]
ich hoffe das war nur für das Demo.

Du bist der absolute Hammer!
Ich schau mir das nochmal genau an, aber dass ist genau das was ich wollte!

Nein der Code war nur fürs Demo ist noch nix bereinigt.

Medium 1. Aug 2008 14:58

Re: Bitmap32 auf ZielBitmap32 malen
 
So wird es wohl noch die einfachste Methode sein, von Hand die Transparenz abzubilden. Aus der G32-Hilfe:
Zitat:

Zitat von G32-Hilfe zu TBitmap32.Draw()
The version with hSrc parameter, is introduced mainly for compatibility reasons. You may use it to transfer data from bitmaps with other formats, or any other windows objects that have device handle (DC). It is based on StretchDIBits GDI call, it does not support transparency and always uses nearest neighbor interpolation when stretching.

Ich habs grad getestet: Es hilft in der Tat nicht das OnPixelCombine-Event auszutauschen und im dmCustom Mode zu zeichnen. Wenn man also auf nicht einfarbige Hintergründe transparent auf einen GDI Canvas zeichen will, so müsste man sich zu Fuß erstmal den Bereich vom Zielcanvas in zweites Bitmap32 schaufeln, dort das andere drauf blenden, und das wieder zurück werfen... Ich mag GDI irgendwie immer weniger :)


Was ich mit den Pufferbitmaps meinte, hat TP ja schon prima umgesetzt, so dass ich denke ich dazu nichts mehr schreiben muss. Generell stellt die Lösung von TP für deinen Fall den besten und vor allem einfachsten Kompromiss dar.

Ich muss zudem noch eine früher gemachte Aussage korrigieren: Die Sache mit der Variable Alpha. Ich hab übersehen, dass dies ein Out-Parameter der PNG-Ladefunktion ist, wodurch es völlig okay ist ihn nicht zu initialisieren. Ich dachte es wäre ein Parameter mit dem man wählen kann ob man nun den Alphakanal mitnehmen will oder nicht. Wer lesen kann ist klar im Vorteil =)


PS: Nichts für ungut in Sachen PN. Da danach hier erstmal nichts mehr passierte, nahm ich an es ginge um dieses Thema :cheers:

stOrM 1. Aug 2008 15:01

Re: Bitmap32 auf ZielBitmap32 malen
 
Jepp TP, hat das genial gelöst, mein einziges Problem stellt grad nur die ItemHeight dar, die ja variable ist, nu weiss ich nicht wie ich die Bar nu auf Itemheight angleichen soll da mein Resampler ja nu wech is :-(

DeddyH 1. Aug 2008 15:02

Re: Bitmap32 auf ZielBitmap32 malen
 
Du müsstest die Bitmap dynamisch zur Laufzeit zeichnen, dann kannst Du die Höhe ja anpassen.

stOrM 1. Aug 2008 15:04

Re: Bitmap32 auf ZielBitmap32 malen
 
Heisst ansonsten darf itemheight nicht mehr verändert werden?

Bevor ichs vergesse, kann mir jemand verraten wie ich die gepunktete Linie um die Bar wegbekomme, die immer dann auftaucht wenn ich die Textfarbe des Canvas.Fonts ändere?

Tritt nur beim 2. TextOut auf (kleine Erweiterung von mir der 2. Textout schreibt mir nun unter die Listitems einen Beschreibungstext zum HauptItem) Wenn bei dem 2. Text die Fontfarbe Canvas.Font.Color gesetzt wird hab ich den Punktrahmen...

DeddyH 1. Aug 2008 15:09

Re: Bitmap32 auf ZielBitmap32 malen
 
Dann ist die Frage, wie die Bitmap nach dem Stretchen aussieht.

turboPASCAL 1. Aug 2008 15:17

Re: Bitmap32 auf ZielBitmap32 malen
 
Du kannst das ganze auch variabel gestalten, aber ein arbeiten mit Vergrösser und oder verkleinern kalte ich für falsch, bzw.
für den falschen weg. Bei einem vergrössern oder dessen gegentei kommt es zu unschöhnen graphikfehler auch wenn du den bestmöglichen
algo. anwendest. Hinzu kommt noch das der algo. mehr zeit zum rechnen braucht.
Ein besserer weg wäre das zusammensetzen eine bildes wie ich es im demo angefangen habe.

Bei Skinnkomponenten wird auch dieser weg benutzt.

stOrM 1. Aug 2008 15:20

Re: Bitmap32 auf ZielBitmap32 malen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, mir ist das Prinzip von Zusammensetzen noch nicht ganz klar? Muß ich dafür dann die 2 Grafiken von dir in verschiedenen Dimensionen zeichnen und dann wieder zusammenbauen?

Medium 1. Aug 2008 15:31

Re: Bitmap32 auf ZielBitmap32 malen
 
In der Regel werden nur Bildteile variabel in der Größe gehalten, die entweder horizontal oder vertikal wiederholbar oder verlustfrei streckbar sind. In deinem Fall könnte eine Aufteilung dann ca. so aussehen:

Code:
+--+-------------------+--+
|F |         H        |F |
+--+-------------------+--+
|  |                   |  |
|  |                   |  |
|V |         H        |V |
|  |         V        |  |
|  |                   |  |
+--+-------------------+--+
|F |         H        |F |
+--+-------------------+--+
Auf diese Weise würdest du Kanten und Ecken vor Unschärfe schützen, und lineare Verläufe lassen sich in der Regel gut horizontal und vertikal Strecken, da das auch wieder nichts weiter als eine lineare Interpolation wäre (wenn man den linearen Filter dafür nimmt).

stOrM 1. Aug 2008 15:35

Re: Bitmap32 auf ZielBitmap32 malen
 
Zitat:

Zitat von Medium
In der Regel werden nur Bildteile variabel in der Größe gehalten, die entweder horizontal oder vertikal wiederholbar oder verlustfrei streckbar sind. In deinem Fall könnte eine Aufteilung dann ca. so aussehen:

Code:
+--+-------------------+--+
|F |         H        |F |
+--+-------------------+--+
|  |                   |  |
|  |                   |  |
|V |         H        |V |
|  |         V        |  |
|  |                   |  |
+--+-------------------+--+
|F |         H        |F |
+--+-------------------+--+
Auf diese Weise würdest du Kanten und Ecken vor Unschärfe schützen, und lineare Verläufe lassen sich in der Regel gut horizontal und vertikal Strecken, da das auch wieder nichts weiter als eine lineare Interpolation wäre (wenn man den linearen Filter dafür nimmt).

Hm aber laufe ich da nicht wieder Gefahr wegen der Rundung das das wieder nicht geht, weil die müssten ja dann in der Höhe gestaucht bzw gestreckt werden, das gleiche mit dem Mittelteil?

DeddyH 1. Aug 2008 15:39

Re: Bitmap32 auf ZielBitmap32 malen
 
Die "F"-Teile (also die Ecken) müssen ja nicht skaliert werden.

stOrM 1. Aug 2008 15:42

Re: Bitmap32 auf ZielBitmap32 malen
 
JO stimmt ja ich depp nur die Zwichenteile :-)


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

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