Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Transparentfarbe aus Pixelposition im Bild (https://www.delphipraxis.net/74303-transparentfarbe-aus-pixelposition-im-bild.html)

Moony 1. Aug 2006 08:47


Transparentfarbe aus Pixelposition im Bild
 
Hallo zusammen,

wie schon der Titel besagt, möchte ich meine Transparentfarbe auf das Bld abstimmen. Dafür benötige ich die Farbe des Bildes von von einer bestimmten Position. Dies habe ich folgendermaßen versucht:

Delphi-Quellcode:
TImage.Picture.Bitmap.TransparentColor := TImage.Picture.Bitmap.Canvas.Pixels[1,1];
Ich möchte also nach diesen Angaben den oberen, linken Pixel als Transparentfarbe verwenden, deshalb die Angabe von 1,1. Leider liefert mir die Pixels-Funktion den Wert -1 zurück.

Ich hoffe mir kann da jemand weiterhelfen.

Gruß, Moony

freak4fun 1. Aug 2006 08:55

Re: Transparentfarbe aus Pixelposition im Bild
 
Delphi-Quellcode:
Image1.Picture.Bitmap.TransparentColor := Image1.Picture.Bitmap.Canvas.Pixels[1,1];
Viellleicht so? Also mit dem erstellten Objekt.

Moony 1. Aug 2006 08:58

Re: Transparentfarbe aus Pixelposition im Bild
 
Damit mache ich das auch....Ich mache das ja nicht mit dem Objekttyp sondern mit dem erstellten Objekt.

himitsu 1. Aug 2006 09:18

Re: Transparentfarbe aus Pixelposition im Bild
 
eventuell so ... vorallem tmFixed ist wichtig :)
Delphi-Quellcode:
// kann man auch im OI instellen
Image1.Transparent := True;
// wird wohl auch gleich über das Image mit umgestllt
Image1.Picture.Bitmap.Transparent := True;
// wichtig, wenn du selber die farbe bestimmen willst
Image1.Picture.Bitmap.TransparentMode := tmFixed;
// tja, halt deine Farbe ^^
Image1.Picture.Bitmap.TransparentColor := ...;

Moony 1. Aug 2006 09:23

Re: Transparentfarbe aus Pixelposition im Bild
 
Das mit dem Tranparentmode hab ich auch schon probiert, wobei das eigentlich überflüssig ist, da sobald eine Farbe festgelegt wird sich der Mode automatisch auf tmFixed ändert.

Was aber für mich wichtig ist, ist die Farbe von einem Pixel im Bild zu bekommen und dann zu setzen. Das heißt, ich möchte zum Bespiel aus dem Bld das geladen ist die Farbe des Pixels in der 2. Reihe, 5. Pixel erhalten. deshalb ja die Pixels-Funktion. aber diese liefert mir den Wert -1 zurück.

Flocke 1. Aug 2006 09:29

Re: Transparentfarbe aus Pixelposition im Bild
 
Links oben ist Canvas.Pixels[0,0] und nicht [1,1]. Vielleicht liegt dein Bildpunkt nicht in der Bitmap?

DGL-luke 1. Aug 2006 09:30

Re: Transparentfarbe aus Pixelposition im Bild
 
Pixels ist 0-indexed! Evtl. schlägst du ja erstmal auf ein 1x1-Bild, was natürlich nicht hinhaut... ansonsten sollte es eigentlich nie Fehlercodes zurückgeben, sondern Exceptions raisen...

Zitat:

Beachten Sie, dass die Eigenschaft Pixels nicht von jedem Gerätekontext unterstützt wird. Wenn der vorliegende Gerätekontext die Eigenschaft Pixels nicht unterstützt, gibt ein Lesezugriff den Wert -1 zurück. Die Zuweisung eines Wertes bleibt ohne Wirkung.
Ist dein Canvas evtl. gar nicht an einen Kontext gebunden?

Flocke 1. Aug 2006 09:34

Re: Transparentfarbe aus Pixelposition im Bild
 
Zitat:

Zitat von DGL-luke
... ansonsten sollte es eigentlich nie Fehlercodes zurückgeben, sondern Exceptions raisen...

GetPixel ruft einfach Windows.GetPixel auf, ohne jede Fehlerprüfung.

Zitat:

Zitat von DGL-luke
Ist dein Canvas evtl. gar nicht an einen Kontext gebunden?

Eine TBitmap benutzt an sich einen Memory-DC, der sollte das können.

P.S. @Moony: schöne Grüße aus Unna nach Kamen.

Moony 1. Aug 2006 09:57

Re: Transparentfarbe aus Pixelposition im Bild
 
@DGL-luke: An welchen Kontext sollte es denn gebunden sein. Ich rufe diese funktion über ein Imageobject auf. Ich will doch lediglich die Farbe eines bestimmten Pixels innerhalb des geladenen Objekts.

@Flocke: Grüße zurück.

Des Weiteren habe ich festgestellt, dass genau das gleiche Bild mit den fast gleichen Pixeleigenschaften überhaupt nicht berührt wird von der Transparenz!

mimi 1. Aug 2006 10:40

Re: Transparentfarbe aus Pixelposition im Bild
 
ich habe genau das gleich versucht und es hat mich tage gekostet um festzustellen das es an Tranzparentcolor liegt weil ich hatten ihn so zugewiesen wie du auch doch das klappte nicht.

Ich meine es liegt dran das die farben nicht 100%ig überein stimmen du musst irgenwie eine Tolleranz einbauen.
ich habe es so gelöst versuche mal folgenden code:

Delphi-Quellcode:
function collision(Bild1, Bild2:TBitMap; x1,y1,x2,y2:Integer):Boolean;
var
  sx,sy:Integer;
  test:Boolean;
  r1,r2,r3:TRect;
begin
  // Position vom zweiten objekt berechnen
  sx:=x2-x1; sy:=y2-y1;
  test:=False;
  r2.Left:=x2; r2.Top:=y2; r2.Right:=x2+bild2.Width; r2.Bottom:=y2+bild2.Height;
  r1.Left:=x1; r1.Top:=y1; r1.Right:=x1+bild1.Width; r1.Bottom:=y1+bild1.Height;
  if IntersectRect(r3,r1,r2) = True then begin
    if Bild1.Canvas.Pixels[sx,sy] = Bild1.Canvas.Pixels[1,1] then test:=False
    else test:=True;
  end;
  result:=Test;
end; // Collsion
das problem dabei ist jetzt nur noch das wenn du von oben kommst fehler kommen evlt. bekommst du eine lösung hin oder hast eine idee wie es gelöst werden könnte :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 Uhr.
Seite 1 von 2  1 2      

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