| Autor |
Beitrag |
Darkpara
      
Beiträge: 61
Win XP
|
Verfasst: Do 12.10.06 19:44
hallo zusammen
ich hab ein problem mit einem pointer und hab gehoft ihr könnt mir weiter helfen
also zu meinem problem:
ich hatte früher immer die standart bitmapts gebraucht, und wollte nun auf ein TBitmap 32 umstellen der Graphics32 units
und wollte meine prozedur umschreiben nur klappt da was ned...
was vl. noch wichtig ist, in der help von G32 steht volgendes:
Delphi-Quelltext 1: 2:
| TColor32Array type TColor32Array = array [0..0] of TColor32; |
Delphi-Quelltext 1:
| type PColor32Array = ^TColor32Array; |
A reference to array of TColor32-typed values.
Most likely you will never use the TColor32Array type itself, however PColor32Array is the one of some importance. It provides indexed access to color values stored in memory. For example, in TBitmap32, it is used to access pixel data.
ich denke das ist doch das was ich wissen muss um das program umzuschreiben? aber ich pack es ned
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| procedure TForm1.RBG_to_HLSClick(Sender: TObject); type TRGBColor = record R, G, B: byte;
end; var pData: ^TColor32Array; x,y:integer; begin
with cible_couleur.Canvas do begin Brush.Color:=RGB(255,255,255); FillRect(rect(0,0,320,240)); end;
for y:= 0 to 239 do begin pData := capture.bitmap.ScanLine[y]; for x:= 0 to 319 do begin
RGB1:=(pData^.R)*256*256+(pData^.G)*256+(pData^.B); RGBtoHSL (RGB1, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; inc(pData); end; end; end; |
bei der compilation gibts folgenden fehler:
[Pascal Error] Unit1.pas(219): E2010 Incompatible types: 'Pointer' and 'PColor32Array'
hoffe ihr könnt mir helfen
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 12.10.06 19:53
da wäre denn nur noch hilfreich wenn du noch sagen würdest welche zeile das in dem quelltextfragment ist.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: Do 12.10.06 19:55
in dieser zeile : pData := capture.bitmap.ScanLine[y];
im übrigen is RGB1:=(pData^.R)*256*256+(pData^.G)*256+(pData^.B); auch falsch da pData ja falsch is.. mti folgender fehler meldung: [Pascal Error] Unit1.pas(222): E2018 Record, object or class type required
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 12.10.06 20:00
nun ich glaube ich habe es auch so gefunden dein pdata kannst du nicht wie in C/C++ referenzieren. pData ist ein ARRAY! es einthält also eine ganze pixelzeile.
deshalb musst du mit pData^[index].r usw. auf die wert zugreifen. wobei index sich dann pro pixel um 1 erhöht. was heißt das du dafür deinen "x"-wert verwenden kannst.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 12.10.06 20:06
nun da musst du dann wohl einfach auf den richtigen typen casten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type PTColor32Array=^TColor32Array;
var pData:PTColor32Array;
pData := PTColor32Array(capture.bitmap.ScanLine[y]); |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Do 12.10.06 20:15
Hallo,
wo hast du den die Unit her? Und warum feste Werte in der Schleife?
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: Do 12.10.06 20:18
oki super danke das hat geklappt aber....
next problem^^
wie krig ichmeine werte da wieder raus?
Delphi-Quelltext
geht aber krig ich da auch wirklich die richtigen farb werte?
Delphi-Quelltext 1: 2: 3: 4:
| TColor32 = type Cardinal;
PColor32Array = ^TColor32Array; TColor32Array = array [0..0] of TColor32; |
da hab ich in der G32 unit gefunden, konkret is mein problem nun ich hab nen array und nen pointer
ein array weiss ich wie ich das rauskrig, ein pointer auch aber mein pData is ja ein pointer und ein array zu gelich
wie geht das dann?  bin bischen verwirrt^^
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: Do 12.10.06 20:21
die unit hab ich von sourceforge.net/projects/graphics32
(die werte? meinste die 255*255..
das ist damit die farbwerte Rot Grün Blau die alle die werte von 0..255 haben können in ein
TColor = -$7FFFFFFF-1..$7FFFFFFF;
format zu schreiben für die weiteren berechnungen)
jaja habs nochma gelesen und weis nun was du meinst^^ hm, ist halt immer gleiche grösse das bild desswegen die festen werte
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 12.10.06 20:46
ich denke mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| for x:= 0 to 319 do begin RGB1:=(pData^[x].R)*256*256+(pData^[x].G)*256+(pData^[x].B); RGBtoHSL (RGB1, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; inc(pData); end; |
nur denke ich mal das du "^" weglassen kannst. aber probiers erstmal mit.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 12.10.06 20:48
habe mir mal die g32 gezogen. macht nen sehr guten eindruck. ich hatte mir sowas in den letzten monaten selber geschrieben und bin immer wieder auf mächtige geschwindigkeitsprobleme gestoßen. wenn ich die g32 eingebunden bekomme gibt es hier bald ein neues game zu testen. bald soll heißen wenn ich denn mal zeit habe weiter zu basteln, also weinachten?
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: Do 12.10.06 21:02
hm hatte ich auch schon probiert das gibt folgenden error in der linie:
Delphi-Quelltext 1:
| RGB1:=(pData^[x].R)*256*256+(pData^[x].G)*256+(pData^[x].B); |
[Pascal Error] Unit1.pas(223): E2018 Record, object or class type required
weis echt ned mehr weiter
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Do 12.10.06 21:08
Hallo,
ich hab dir mal kurz ein einfaches Beispiel geschrieben. Ich verändere den Rotwert. Ich denke, damit kannst du auch deinen eigenen Fehler finden, weil ich insgesamt noch nicht verstanden habe, was du eigentlich machen möchtest, geschweige denn du alle Variablen deklariert hast:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.FormPaint(Sender: TObject); var Bmp: TBitmap32; Data: PColor32Array; Color: TColor32; I, J: Integer; begin Bmp := TBitmap32.Create; Bmp.LoadFromFile('C:\apple.bmp'); for I := 0 to Bmp.Height - 1 do begin Data := Bmp.ScanLine[I]; for J := 0 to Bmp.Width - 1 do begin Color := Data[J]; TColor32Entry(Color).R := 100; Data[J] := Color; end; end; BitBlt(Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY); Bmp.Free; end; |
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Darkpara 
      
Beiträge: 61
Win XP
|
Verfasst: Do 12.10.06 21:14
vielen dank, denke mit dem bsp werd ichs hinkrigen und sonst meld ich mich wieder^^ lol
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 12.10.06 21:20
das müsste jetzt aber gehen. das ist jetzt aus der gr32!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| for x:= 0 to 319 do begin RGB1:=RedComponent(pData^[x])*256*256+GreenComponent(pData^[x])*256+BlueComponent(pData^[x]); RGBtoHSL (RGB1, H1, S1, L1); matrix[0,x,y,1]:= H1 ; matrix[0,x,y,2]:= S1 ; matrix[0,x,y,3]:= L1 ; inc(pData); end; |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Do 12.10.06 21:21
Jetzt bin ich neugierig geworden: Wie klappt das mit dem Alphakanal?
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
|