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:
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.
TImage.Picture.Bitmap.TransparentColor := TImage.Picture.Bitmap.Canvas.Pixels[1,1];
Ich hoffe mir kann da jemand weiterhelfen. Gruß, Moony |
Re: Transparentfarbe aus Pixelposition im Bild
Delphi-Quellcode:
Viellleicht so? Also mit dem erstellten Objekt.
Image1.Picture.Bitmap.TransparentColor := Image1.Picture.Bitmap.Canvas.Pixels[1,1];
|
Re: Transparentfarbe aus Pixelposition im Bild
Damit mache ich das auch....Ich mache das ja nicht mit dem Objekttyp sondern mit dem erstellten Objekt.
|
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 := ...; |
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. |
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?
|
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:
|
Re: Transparentfarbe aus Pixelposition im Bild
Zitat:
Zitat:
P.S. @Moony: schöne Grüße aus Unna nach Kamen. |
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! |
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:
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
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 |
Re: Transparentfarbe aus Pixelposition im Bild
Hallo Moony,
Zitat:
Gruß Hawkeye |
Re: Transparentfarbe aus Pixelposition im Bild
Aber warum soll ich hier 2 Objekte übergeben? Ich hab doch nur ein Inageobjekt und will von diesem die Farbe ermiteln.
|
Re: Transparentfarbe aus Pixelposition im Bild
@Hawkeye: Ich kann dir nicht sagen ob das dieser Wert ist. Ich bekommen -1 als Rückgabewert.
|
Re: Transparentfarbe aus Pixelposition im Bild
Die Konstante ist in der Unit Windows.pas vereinbart:
Delphi-Quellcode:
Wenn man den Wert als Integer interpretiert, erhält man -1. Das GDI liefert den Wert, falls der abgefragte Pixel außerhalb des aktuellen Clippingbereichs liegt.
CLR_INVALID = DWORD($FFFFFFFF);
Versuche doch einmal, vor der Abfrage den Clippingbereich zurückzusetzen:
Delphi-Quellcode:
Vielleicht erhältst du so den gewünschten Farbwert.
SelectClipRgn(Image1.Canvas.Handle, 0);
TransColor := Image1.Canvas.Pixels[1, 1]; Gruß Hawkeye |
Re: Transparentfarbe aus Pixelposition im Bild
Das setzen des Clippingbreichs hilft lider auhc nichts....
|
Re: Transparentfarbe aus Pixelposition im Bild
Schieb das Bild mal rüber.
|
Re: Transparentfarbe aus Pixelposition im Bild
Hat sich erledigt. Ich habe das Problem gelöst. Man muß auch die Transparenzfarbe setzen NACHDEM das Bild geladen wurde und NICHT vorher!!! :oops: Habe das in dem komplexen Wirrwarr nicht gesehen...
Danke für eure Hilfe. :thumb: Gruß, Moony |
Re: Transparentfarbe aus Pixelposition im Bild
meins wahr für eine Collisions funktion gedacht, darum zwei objekte.....
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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