Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Problem beim Benutzen eines GDI+ API Aufufes (https://www.delphipraxis.net/53021-problem-beim-benutzen-eines-gdi-api-aufufes.html)

sieppl 8. Sep 2005 15:23


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: 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

ste_ett 8. Sep 2005 15:35

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Code:
typedef struct {
    UINT numberOfAreas;
    RECT *areas;
} RedEyeCorrectionParams;
wäre dann

Code:
TGPRedEyeCorrectionParams = packed record
  numberOfAreas: Cardinal;        
  areas: PRect;
end;

Olli 8. Sep 2005 16:01

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;

sieppl 8. Sep 2005 16:04

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Zitat:

Zitat von ste_ett
wäre dann

Code:
TGPRedEyeCorrectionParams = packed record
  numberOfAreas: Cardinal;        
  areas: PRect;
end;

Habe ich auch schon probiert. Ob nun Pointer oder PRect, dass sollte doch egal sein..

Olli 8. Sep 2005 16:13

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Wie lautet deine Deklaration von: GdipSetEffectParameters?

sieppl 9. Sep 2005 09:54

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Zitat:

Zitat von Olli
Wie lautet deine Deklaration von: GdipSetEffectParameters?

siehe hier: MSDN

Meine Übersetzung:

Delphi-Quellcode:
  function GdipSetEffectParameters(Effect :GPeffect; Params: GPEffectParams; const Size: LongInt): GPStatus; stdcall;
wobei GpEffect und GPEffectParams als 'Pointer' deklariert sind. Wie gesagt, das müsste stimmen, da ich einige andere Effektparameter damit schon erfolgreich gesetzt habe.

Olli 9. Sep 2005 09:58

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Dann hast du es dennoch falsch übersetzt. Probier mal:
Delphi-Quellcode:
function GdipSetEffectParameters(Effect :GPeffect; Params: GPEffectParams; Size: LongInt): GPStatus; stdcall;
Const bedeutet in Delphi und C++ jeweils etwas anderes. Könnte sein, daß du über diese Kleinigkeit stolperst.

sieppl 9. Sep 2005 10:14

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Zitat:

Zitat von Olli
Dann hast du es dennoch falsch übersetzt. Probier mal:
Delphi-Quellcode:
function GdipSetEffectParameters(Effect :GPeffect; Params: GPEffectParams; Size: LongInt): GPStatus; stdcall;
Const bedeutet in Delphi und C++ jeweils etwas anderes. Könnte sein, daß du über diese Kleinigkeit stolperst.

Hi Olli!
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. :(

Olli 9. Sep 2005 10:19

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.

sieppl 9. Sep 2005 10:26

Re: Problem beim Benutzen eines GDI+ API Aufufes
 
Zitat:

Zitat von Olli
Dann zeige doch nochmal deine Deklarationen für die beiden Typen:

GPeffect
GPEffectParams

Wobei ersterer vermutlich weniger interessiert. Aber zeig sie trotzdem mal beide.

Delphi-Quellcode:
  GpEffect = Pointer;
  GPAuxData = Pointer;
  GPEffectParams = Pointer;


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr.
Seite 1 von 2  1 2      

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