Autor Beitrag
Darkpara
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: 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:

ausblenden Delphi-Quelltext
1:
2:
TColor32Array
type TColor32Array = array [0..0] of TColor32;


ausblenden 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

ausblenden volle Höhe Delphi-Quelltext
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 //vecteur avec les 3 valeur de couleur
  R,
  G,
  B: byte;

end;
var
  pData: ^TColor32Array; //war vorher "pData: ^TRGBColor;"
  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 user profile iconChristian S.: Delphi-Tags hinzugefügt
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 12.10.06 20:06 
nun da musst du dann wohl einfach auf den richtigen typen casten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// typ deklarieren
type 
  PTColor32Array=^TColor32Array;

// variable vom typ anlegen
var
  pData:PTColor32Array;

// auf typ casten
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: Do 12.10.06 20:18 
oki super danke das hat geklappt aber....
next problem^^
wie krig ichmeine werte da wieder raus?
ausblenden Delphi-Quelltext
1:
RGB1:=(pData[x]);					

geht aber krig ich da auch wirklich die richtigen farb werte?
ausblenden 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? :D bin bischen verwirrt^^
Darkpara Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 12.10.06 20:46 
ich denke mal so:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: Do 12.10.06 21:02 
hm hatte ich auch schon probiert das gibt folgenden error in der linie:

ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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:
ausblenden 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;  //a bit red :)
      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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 61

Win XP

BeitragVerfasst: Do 12.10.06 21:14 
vielen dank, denke mit dem bsp werd ichs hinkrigen und sonst meld ich mich wieder^^ lol
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 12.10.06 21:20 
das müsste jetzt aber gehen. das ist jetzt aus der gr32!

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: 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.