Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Get Pixels (https://www.delphipraxis.net/158804-get-pixels.html)

XXcD 3. Mär 2011 19:38

Get Pixels
 
Hallo,
kann mir einer verraten wie ich das von Flash in Delphi übersetzen kann?

Code:
function handleLoadComplete(event:Event) : void {
    var ba:ByteArray;
   
    var event:* = event;
    ba = event.target.content.bitmapData.getPixels(new Rectangle(0, 0, 30, 23));
Momentan mache ich das so:

Delphi-Quellcode:
var
a: array [0..689] of Byte;
...

  for I := 0 to 23 - 1 do
   begin
      for N := 0 to 30 - 1 do
       begin
        a[I*N]:=GetPixel(Form1.Image1.Picture.Bitmap.Handle, N, I);
       end;
   end;
Aber wenn ich versuche aus dem Array einen sha256 hash zu erstellen kommt ein falscher Wert raus.

Notxor 3. Mär 2011 21:01

AW: Get Pixels
 
Warum i*n ?

Ich nehme mal an, du willst die einzelnen Pixel durchnummerieren.

Wenn du aber mit i*n rechnest, überschreibst du immer wieder mal alte Werte
(0*0 = 0*1 = 0*2 = ...)
Die Formel müsste also passend geändert werden

XXcD 3. Mär 2011 21:04

AW: Get Pixels
 
Ahhhh stimmt, werde ich sofort ändern.

Ist das denn sonst so richtig?

Notxor 4. Mär 2011 14:05

AW: Get Pixels
 
Delphi-Quellcode:
dc := GetDC(0);
farbe:=GetPixel(dc,x,y);
ReleaseDC(0, dc);
so in der Richtung müsste es gehen

himitsu 4. Mär 2011 14:18

AW: Get Pixels
 
Zitat:

Zitat von XXcD (Beitrag 1085724)
Aber wenn ich versuche aus dem Array einen sha256 hash zu erstellen kommt ein falscher Wert raus.

Ich vermute auch mal, daß ein Pixel größer ist, als ein einzelnes Byte.
(jenachdem wie das Bild kodiert ist)

Man müßte also mal wissen was getPixels macht, bzw. in welchem Format es die Rohdaten der Pixel liefert und vorallem wieviele Bytes es zurückgibt.

XXcD 4. Mär 2011 19:02

AW: Get Pixels
 
Also es ist ein PNG Bild mit 32 Bit.

Ich vermute mal, dass die Flash Version den Alphachannel mit ausliest.
Aber wie geht das in Flash, werden da die Daten hintereinander eingelesen?

ALso etwa so?

Byte[0]=Rotwert Pixel 1
Byte[1]=Grün Pixel 1
Byte[2]=Blau Pixel 1
Byte[3]=Alpha Pixel 1
Byte[4]=Rot Pixel 2
Byte[5]=Grün Pixel 2
...

XXcD 6. Mär 2011 13:10

AW: Get Pixels
 
Ich wollte mal pushen, vielleicht kann mir ja noch einer helfen. Das Thema ist immernoch aktuell.

Aphton 6. Mär 2011 13:46

AW: Get Pixels
 
Delphi-Quellcode:
var
  p: PByte;
  a: array [0..689] of Byte;

  with Form1.Image1.Picture.Bitmap do
    p := Scanline[Height-1];
 
  for i := 0 to 689 do
  begin
    a[i] := p^;
    inc( p );
  end;
...?

Medium 6. Mär 2011 14:55

AW: Get Pixels
 
Die Reihenfolgen der Kanäle werden recht unterschiedlich gebraucht. Üblich sind ARGB, RGBA, ABGR und BGRA, wobei durch Endianess+Wortbreite dann noch quasi praktisch jede andere Kombination auftauchen könnte. Wenn du an die Flashquellen nicht ran kommst, hilft fast nur noch ausprobieren und Ergebnisse vergleichen. Ich weiss auch grad nicht aus dem Kopf, in wie weit PNG da variabel ist, wobei eben auch wenn man das wüsste, nicht gesichert ist, dass ein Loader da nicht wieder eine Neuordnung vornimmt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:32 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