AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bmp+Farbe mit "or" verknüpfen - kein Copymode vorhanden
Thema durchsuchen
Ansicht
Themen-Optionen

Bmp+Farbe mit "or" verknüpfen - kein Copymode vorhanden

Ein Thema von Cöster · begonnen am 19. Dez 2006 · letzter Beitrag vom 20. Dez 2006
Antwort Antwort
Seite 1 von 2  1 2      
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#1

Bmp+Farbe mit "or" verknüpfen - kein Copymode vorh

  Alt 19. Dez 2006, 18:03
Hi!

Es gibt ja jede Menge verschiedene CopyModes (SRCCOPY, ...), aber ich habe keinen gefunden, der das Source-Bitmap mittels "or" mit einer Farbe (z.B. Brush.Color des Dest-Images) verknüpft.

Deswegen hab ich mir dafür selber nen Code geschrieben:

Delphi-Quellcode:
// kopiert "Src or Color" an die Position (AX, AY) des Dest-Bitmaps
procedure DrawOr(const Dest: TBitmap; AX, AY: Integer; const Src: TBitmap; Color: TColor);
type
   TPixArray = array[0..2] of Byte;
var
   Buffer: TBitmap;
   SrcP: ^TPixArray;
   X, Y: Integer;
begin
   Buffer := TBitmap.Create;
   try
      Buffer.SetSize(Src.Width, Src.Height);
      BitBlt(Buffer.Canvas.Handle, 0, 0, Buffer.Width, Buffer.Height,
         Src.Canvas.Handle, 0, 0, SRCCOPY);
      Buffer.PixelFormat := pf24Bit;
      for Y := 0 to Buffer.Height - 1 do
      begin
         SrcP := Buffer.ScanLine[Y];
         for X := 0 to Buffer.Width - 1 do
         begin
            SrcP^[3 * X] := SrcP^[3 * X] or ((Color shr 16) and $FF);
            SrcP^[3 * X + 1] := SrcP^[3 * X + 1] or ((Color shr 8) and $FF);
            SrcP^[3 * X + 2] := SrcP^[3 * X + 2] or (Color and $FF);
         end;
      end;
      Buffer.Transparent := Src.Transparent;
      Buffer.TransparentColor := Src.TransparentColor;
      Dest.Canvas.Draw(AX, AY, Buffer);
   finally
      Buffer.Free;
   end;
end;
Lässt sich dieser Code optimieren? Hab ich ihn umsonst geschrieben, weil es schon irgendwo eine (bessere) Alternative gibt?

[edit]Wertparameter der Objektreferenzen in Konstantenparameter umgewandelt[/edit]
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 18:11
Habe es nicht getestet und auch sonst nix weiter zu sagen, nur ist in deinem Header ein Fehler drin, es sollte
procedure DrawOr(var Dest: TBitmap; AX, AY: Integer; Src: TBitmap; Color: TColor); heißen, da du sonst Dest ja nicht wieder zurückgeben kannst.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 18:14
Zitat von Flare:
Habe es nicht getestet und auch sonst nix weiter zu sagen, nur ist in deinem Header ein Fehler drin, es sollte
procedure DrawOr(var Dest: TBitmap; AX, AY: Integer; Src: TBitmap; Color: TColor); heißen, da du sonst Dest ja nicht wieder zurückgeben kannst.
Nein, damit gibst du ihm nur die Möglichkeit die Instanz zu verändern - also er könnte nun hier die übergebene Instanz freigeben und eine neue erzeugen, aber zurückgeben kann er die Daten trotzdem, da es ein Instanzenzeiger ist.

Er könnte sogar Const nehmen und der Code würde immernoch funktionieren. Mit Const würde er nur dafür sorgen, dass die Methode die Instanz nicht verändern darf, ihre Eigenschafte und Werte aber schon.
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 18:26
Zitat von Muetze1:
Er könnte sogar Const nehmen
Sollte ich auch? D.h. bringt das optimierungstechnisch was? In der Hilfe steht ja, dass das bei Strings und strukturierten Typen den Code optimiert. Strukturierte Typen sind so definiert:

Zitat:
Zu den strukturierten Typen gehören Mengen-, Array-, Record- und Datei-, Klassen-, Klassenreferenz- und Interface-Typen.
Was genau versteht man unter Klassenreferenztypen? Ist eine Instanz ein Klassenreferenztyp? Denn dann würde sich ein const ja lohnen.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 18:34
Dest ist eine Referenz auf ein TBitmap, oder
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 18:53
Zitat von cruiser:
Dest ist eine Referenz auf ein TBitmap, oder
Hm, TBitmap ist eine Klasse, aber ein TBitmap ist ein Objekt einer Klasse, also nicht eine Klasse oder doch?
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 19:37
So oder so aber, dass es wirklich spürbar performanter wird kann ich mir nich vorstellen

ausser du machst das ... uhm ... sehr oft und schnell hintereinander
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 20:04
Zitat von Cöster:
Zitat von cruiser:
Dest ist eine Referenz auf ein TBitmap, oder
Hm, TBitmap ist eine Klasse, aber ein TBitmap ist ein Objekt einer Klasse, also nicht eine Klasse oder doch?
Objektreferenz und Klassenreferenz kannst du als synonym betrachten .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 21:08
Zitat von Khabarakh:
Objektreferenz und Klassenreferenz kannst du als synonym betrachten .
Ah gut, also const, ich editier es mal im ersten Beitrag. Gibt es sonst noch Optimierungsmöglichkeiten?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: Bmp+Farbe mit "or" verknüpfen - kein Copymode

  Alt 19. Dez 2006, 21:19
Soweit ich weiß, sollte ein 32-Bit-Bild schneller zu bearbeiten sein, vor Allem kannst du dann das gesamte Pixel auf einmal mit der Farbe verrechnen und musst nicht jeden Kanal einzeln behandeln. Mir ist auch nicht ganz klar, wofür du das temporäre Bitmap benötigst.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:17 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