AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Get Pixels

Ein Thema von XXcD · begonnen am 3. Mär 2011 · letzter Beitrag vom 6. Mär 2011
Antwort Antwort
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#1

Get Pixels

  Alt 3. Mär 2011, 19:38
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.

Geändert von XXcD ( 3. Mär 2011 um 19:42 Uhr)
  Mit Zitat antworten Zitat
Notxor

Registriert seit: 28. Okt 2009
41 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Get Pixels

  Alt 3. Mär 2011, 21:01
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
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Get Pixels

  Alt 3. Mär 2011, 21:04
Ahhhh stimmt, werde ich sofort ändern.

Ist das denn sonst so richtig?
  Mit Zitat antworten Zitat
Notxor

Registriert seit: 28. Okt 2009
41 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Get Pixels

  Alt 4. Mär 2011, 14:05
Delphi-Quellcode:
dc := GetDC(0);
farbe:=GetPixel(dc,x,y);
ReleaseDC(0, dc);
so in der Richtung müsste es gehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: Get Pixels

  Alt 4. Mär 2011, 14:18
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Mär 2011 um 14:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#6

AW: Get Pixels

  Alt 4. Mär 2011, 19:02
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
...

Geändert von XXcD ( 5. Mär 2011 um 12:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von XXcD
XXcD

Registriert seit: 19. Sep 2006
581 Beiträge
 
Delphi 2007 Professional
 
#7

AW: Get Pixels

  Alt 6. Mär 2011, 13:10
Ich wollte mal pushen, vielleicht kann mir ja noch einer helfen. Das Thema ist immernoch aktuell.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#8

AW: Get Pixels

  Alt 6. Mär 2011, 13:46
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;
...?
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Get Pixels

  Alt 6. Mär 2011, 14:55
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 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