Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap einfärben (https://www.delphipraxis.net/64788-bitmap-einfaerben.html)

SittingDuck 8. Mär 2006 09:38


Bitmap einfärben
 
Moin Moin ...

Hier wird meine Schnellstart-Leiste von Euch mächtig vorran getrieben.
Jetzt möchte ich so genannte Color Themes integrieren um damit die
Hintergrund-Grafiken leicht einzufärben. Ich benutze die gr32-lib.

So gehts nicht:
Delphi-Quellcode:
 with Bitmap32 do
 for i := 0 to Height * Width - 1 do
 Bits[i] := BlendReg(clAqua, Bits[i]);
 EMMS;
Da kommt Delphi ständig mit einem ERangeError ...
Was mache ich falsch ?

Fehlersuchend, grüßt ...

XeRo 8. Mär 2006 09:55

Re: Bitmap einfärben
 
Delphi-Quellcode:
with Bitmap32 do
begin
 for x := 0 to Height do
  begin
   for y:= 0 to Width do
    begin
     //hier den code
    end;
  end;
end;
keine ahnung obs stimmt.. nur hab ich dein Height*Width nicht verstanden...vielleicht gehts ja so. :gruebel:

Muetze1 8. Mär 2006 10:38

Re: Bitmap einfärben
 
Wenn 0-basierend, dann nur bis Pred(Height) und Pred(Width)

SittingDuck 8. Mär 2006 12:03

Re: Bitmap einfärben
 
Tach nochmal ...

Danke erstmal für die Antworten.
So färbe ich konventionell eine Bitmap (oder Bitmap32)
wie in diesem Beispiel leicht Blau ein.

Delphi-Quellcode:
var x,y,r,g,b: integer; TC: TColor32;

 with Bitmap32 do begin
  for x := 0 to Width - 1 do
  for y := 0 to Height - 1 do begin
   TC :=Pixel[x,y];
   R := RedComponent (TC);
   G := GreenComponent(TC);
   B := BlueComponent (TC); B := (B + 255) div 2;
   Pixel[x,y] := Color32(R,G,B);
  end;
 end;
Soweit alles klar ... Allerding dachte ich, das ich dass über Bits
und BlendReg (beides Befehle der gr32-lib) irgendwie eleganter und
vielleicht auch schneller hinbekäme.

Durch blauen Dunst hindurch, grüßt ...

Khabarakh 8. Mär 2006 12:14

Re: Bitmap einfärben
 
Dein Code ist vollkommen richtig, du solltest nur die Bereichsprüfung ausschalten (am besten nur lokal per Compilerswitch).
Aber dein zweiter Code ist ziemlich ineffektiv, diesen solltest du als erstes verbessern, bevor du Pixel durch Bits ersetzt.
Delphi-Quellcode:
for i := 0 to Width * Height - 1 do
begin
  B := (Bits[i] and $FF + $FF) shr 1;
  Bits[i] := Bits[i] and $FFFFFF00 or B;
end;

SittingDuck 8. Mär 2006 13:44

Re: Bitmap einfärben
 
Hallo ...

@Khabarakh: Danke für Deine Hilfe ... Ja sorry, aber meine Routine
entstand aus purer Verzeifelung nachdem ich Stunden lang das Internet
durchforstet hatte ... frei nach dem Motto: 'Hauptsache läuft ...'
So ein 'leicht provokant' geschriebener Sourcecode' holt die wahren
Talente auf die Bühne ... Hut ab vor Deinem Können ! :thumb:

Am liebsten würde ich Dir den gesamten Launcher-Quelltext mal eben
zum 'drübergucken' zuschicken, aber ich habe Angst, das ich dann nur
noch 50 hochoptimierte Zeilen wiederbekomme ... :lol:

Mit dem schnellsten Pinsel, grüßt ...

SittingDuck 12. Mär 2006 16:45

Re: Bitmap einfärben
 
Tach auch ...

Ich muss dieses Thema doch nochmal nach oben holen, nachdem ich
immer noch nicht den gewünschten Effekt hinbekomme.

Ich habe zwei TBitmap32. Das eine ist die Oberfläche von meinem
Programm (der Launcher), das andere TBitmap32 hat die selbe Größe
und beinhaltet einen Farbverlauf. Nun möchte ich das meine Program-
oberfläche eingefärbt wird, mit der Farbinformation des zweiten
TBitmap32.

Die gr32-lib stellt entsprechende Befehle zur Verfügung. (Combine
bzw. CombineMode etc.) Irgendwie tut sich bei mir aber nix. Meine
Launcher-Oberfläche ist unverändert.

Vielleicht habe die gr32-Spezialisten mal ein paar Code-Zeilen
parat, aus denen ich sehen kann wie es gemacht wird.

Lernbereit, grüßt ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 Uhr.

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