![]() |
Problem beim Benutzen eines GDI+ API Aufufes
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: ![]()
Delphi-Quellcode:
Folgender Test schlägt mit lastResult = InvalidParameter fehl:
typedef struct {
UINT numberOfAreas; RECT *areas; } RedEyeCorrectionParams; TGPRedEyeCorrectionParams = packed record NumArray: Cardinal; RectArray: Pointer; end;
Delphi-Quellcode:
Wobei 'nativeEffect' die Instanz des Effektes ist (Ich habe die Vorgehensweise aus der bekannten Übersetzung der GDI+ Header übernommen) Die Instanz wird korrekt erstellt.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; Vielleicht kann ja jemand helfen, habe schon alles mögliche probiert. Verschiedene Record-Größen (durch Integer-Dummies) etc. Grüße Sebastian |
Re: Problem beim Benutzen eines GDI+ API Aufufes
Code:
wäre dann
typedef struct {
UINT numberOfAreas; RECT *areas; } RedEyeCorrectionParams;
Code:
TGPRedEyeCorrectionParams = packed record
numberOfAreas: Cardinal; areas: PRect; end; |
Re: Problem beim Benutzen eines GDI+ API Aufufes
Oder eher in Richtung Borland's Stil:
Delphi-Quellcode:
TRectArray: array[0..0] of TRect;
PRectArray = ^TRectArray; TGPRedEyeCorrectionParams = packed record numberOfAreas: Cardinal; areas: PRectArray; end; |
Re: Problem beim Benutzen eines GDI+ API Aufufes
Zitat:
|
Re: Problem beim Benutzen eines GDI+ API Aufufes
Wie lautet deine Deklaration von: GdipSetEffectParameters?
|
Re: Problem beim Benutzen eines GDI+ API Aufufes
Zitat:
![]() Meine Übersetzung:
Delphi-Quellcode:
wobei GpEffect und GPEffectParams als 'Pointer' deklariert sind. Wie gesagt, das müsste stimmen, da ich einige andere Effektparameter damit schon erfolgreich gesetzt habe.
function GdipSetEffectParameters(Effect :GPeffect; Params: GPEffectParams; const Size: LongInt): GPStatus; stdcall;
|
Re: Problem beim Benutzen eines GDI+ API Aufufes
Dann hast du es dennoch falsch übersetzt. Probier mal:
Delphi-Quellcode:
Const bedeutet in Delphi und C++ jeweils etwas anderes. Könnte sein, daß du über diese Kleinigkeit stolperst.
function GdipSetEffectParameters(Effect :GPeffect; Params: GPEffectParams; Size: LongInt): GPStatus; stdcall;
|
Re: Problem beim Benutzen eines GDI+ API Aufufes
Zitat:
Leider war es das auch nicht. Zum heulen. Das Ding muss irgendwie funktionieren. Der Bild-Manager aus dem Office 2003 Paket setzt genau diesen Effekt erfolgreich ein. :( |
Re: Problem beim Benutzen eines GDI+ API Aufufes
Dann zeige doch nochmal deine Deklarationen für die beiden Typen:
GPeffect GPEffectParams Wobei ersterer vermutlich weniger interessiert. Aber zeig sie trotzdem mal beide. |
Re: Problem beim Benutzen eines GDI+ API Aufufes
Zitat:
Delphi-Quellcode:
GpEffect = Pointer;
GPAuxData = Pointer; GPEffectParams = Pointer; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz