Hi!
Ich weiß nicht, ob bei mir ein Übersetzungsfehler von C++ in Delphi unterlaufen ist oder ob ich an anderer Stelle in Problem habe:
Ich möchte aus
GDI+ einen Effekt zum Entfernen des 'rote Augen'-Effektes benutzen.
Dazu müssen zunächst eine Instanz des Effektes erstellt werden und danach Parameter gesetzt werden.
WICHTIG: Ich habe bereits zahlreiche andere Effekte zum laufen gebracht, es liegt also ein speziellen Problem mit den 'Rote Augen enfernen'-Parametern vor. Folgende Dinge habe ich übersetzt:
(siehe:
GDI+ MSDN
Delphi-Quellcode:
typedef struct {
UINT numberOfAreas;
RECT *areas;
} RedEyeCorrectionParams;
TGPRedEyeCorrectionParams = packed record
NumArray: Cardinal;
RectArray: Pointer;
end;
Folgender Test schlägt mit lastResult = InvalidParameter fehl:
Delphi-Quellcode:
procedure TGPEffectRedEyeCorrection.SetRect;
var
RedEyeCorrectionParams: TGPRedEyeCorrectionParams;
ArrayRect: array of TRect;
begin
SetLength(ArrayRect, 2);
ArrayRect[0] := Rect(0, 0, 50, 50);
ArrayRect[1] := Rect(100, 100, 100, 100);
RedEyeCorrectionParams.NumArray := Length(ArrayRect);
RedEyeCorrectionParams.RectArray := @ArrayRect[0];
lastResult := GdipSetEffectParameters(nativeEffect, @RedEyeCorrectionParams, SizeOf(RedEyeCorrectionParams));
end;
Wobei 'nativeEffect' die Instanz des Effektes ist (Ich habe die Vorgehensweise aus der bekannten Übersetzung der
GDI+ Header übernommen) Die Instanz wird korrekt erstellt.
Vielleicht kann ja jemand helfen, habe schon alles mögliche probiert. Verschiedene Record-Größen (durch Integer-Dummies) etc.
Grüße
Sebastian