Registriert seit: 3. Sep 2004
4.629 Beiträge
Delphi 10.2 Tokyo Starter
|
AW: Surface Stream
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;
Geändert von Zacherl (29. Dez 2013 um 22:15 Uhr)
|
|
Zitat
|