Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: Surface Stream

  Alt 29. Dez 2013, 22:12
Nur auf die Schnelle geschrieben und ungetestet. Sollte aber so in der Art funktionieren:

Delphi-Quellcode:
var
  LockedRect: TD3DLockedRect;
  MS: TMemoryStream;
  I: Integer;
  Color: DWord;
  A, R, G, B: Byte;
begin
  MS := TMemoryStream.Create;
  try
    if (Surface.LockRect(LockedRect, nil, D3DLOCK_READONLY) = D3D_OK) then
    try
      for I := 0 to SurfaceHeight - 1 do
      begin
        // Pitch = Anzahl Bytes per "Zeile", also SurfaceWidth * SizeOf(Pixel)
        MS.WriteBuffer(Pointer(NativeUInt(LockedRect.pBits) + I * LockedRect.Pitch)^, LockedRect.Pitch);
      end;
    finally
      Surface.UnlockRect;
    end;
    // Pixel (24,6) auslesen [*4 ausgehend davon, dass das PixelFormat = ARGB ist]
    MS.Position := (6 * SurfaceWidth + 24) * 4;
    MS.ReadBuffer(Color, SizeOf(Color));
    COLOR_DECODE_ARGB(Color, A, R, G, B);
    // ..
  finally
    MS.Free;
  end;
end;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (29. Dez 2013 um 22:15 Uhr)
  Mit Zitat antworten Zitat