AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi GDI+ Flat API: Matrizen machen mich meschugge...
Thema durchsuchen
Ansicht
Themen-Optionen

GDI+ Flat API: Matrizen machen mich meschugge...

Ein Thema von Mithrandir · begonnen am 21. Okt 2009 · letzter Beitrag vom 21. Okt 2009
Antwort Antwort
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

GDI+ Flat API: Matrizen machen mich meschugge...

  Alt 21. Okt 2009, 08:50
Hi ihr,

ich habe folgendes vor:

Ich möchte eine Textausgabe um eine X-Achse direkt unterhalb des Textes spiegeln. Ich nutze zum Zeichnen auf dem Canvas die GDI+ Flat API, da es sich um ein nonVCL-Projekt handelt. Allerdings blicke ich das ganze Transformieren mit den Matrizen noch nicht so.

Hier mein Code:

Delphi-Quellcode:
if FSongPosTime <> 'then
  begin
    GdipCreateSolidFill(FSongTimeColor, gpFontBrush);
    rectF := MakeRectF(255, 56, 85, 24);
    gpGetStatus(GdipDrawString(gpGraphics, StringToOleStr(FSongPosTime), length(FSongPosTime), gpTimeFont, @rectF, gpStrFormat, gpFontBrush));
    GdipCreateMatrix(fMatrix);
    GdipSetMatrixElements(fMatrix, -1, 1, 0, 1, DisplayWidth div 2, DisplayHeight div 2);
    GdipSetWorldTransform(gpGraphics, fMatrix);
    gpGetStatus(GdipDrawString(gpGraphics, StringToOleStr(FSongPosTime), length(FSongPosTime), gpTimeFont, @rectF, gpStrFormat, gpFontBrush));
    GdipResetWorldTransform(gpGraphics);
    GdipDeleteMatrix(fMatrix); *)
  end;
Orientiert habe ich mich an dem Beispiel der GDIPlus - Komponenten, die es für Delphi gibt. Allerdings brauche ich ja nur die Funktion, deswegen möchte ich eigentlich auf dieses "Monster" verzichten.

Oben geschriebener Code macht aber - nichts. Oder das Bild wird gespiegelt und landet im Nirvana, auf dem Bild ist es jedenfalls nicht zu sehen. Damit ihr auch seht, worum es geht, habe ich mal zwei Bilder in den Anhang gepackt. Der rechte Teil mit der Zeitanzeige ist der interessante, die Bilder habe ich mit Paint.NET bearbeitet.

Vielleicht gibt es hier ja jemanden, der schon Erfahrung mit Matrizen und der API hat...
Miniaturansicht angehängter Grafiken
st_original_924.png   st_original_mod_127.png  
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#2

Re: GDI+ Flat API: Matrizen machen mich meschugge...

  Alt 21. Okt 2009, 10:04



( nur mal so als Test )
Angehängte Dateien
Dateityp: zip textwithmatrix_200.zip (284,1 KB, 26x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

Re: GDI+ Flat API: Matrizen machen mich meschugge...

  Alt 21. Okt 2009, 11:21
Wat würde ich nur ohne dich machen..

Delphi-Quellcode:
  if FSongPosTime <> 'then
  begin
    GdipCreateSolidFill(FSongTimeColor, gpFontBrush);
    rectF := MakeRectF(195, 82, 0, 0);
    gpGetStatus(GdipDrawString(gpGraphics, StringToOleStr(FSongPosTime), length(FSongPosTime), gpTimeFont, @rectF, gpStrFormat, gpFontBrush));
    rectF := MakeRectF(194, -71, 0, 0);
    GdipCreateMatrix(fMatrix);
    gpGetStatus(GdipSetMatrixElements(fMatrix, 1, 0, 0, -1, 1, 1));
    gpGetStatus(GdipSetWorldTransform(gpGraphics, fMatrix));
    gpr := MakeRect(194, -74, 85, 29);
    GdipCreateLineBrushFromRectI(@gpr, $02999999, $A0999999, LinearGradientModeVertical, WrapModeTile, gpMirrorBrush);
    gpGetStatus(GdipDrawString(gpGraphics, StringToOleStr(FSongPosTime), length(FSongPosTime), gpTimeFont, @rectF, gpStrFormat, gpMirrorBrush));
    gpGetStatus(GdipResetWorldTransform(gpGraphics));
    gpGetStatus(GdipDeleteMatrix(fMatrix));
  end;
Liefert das Ergebnis im Anhang.
Miniaturansicht angehängter Grafiken
st_final_119.png  
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
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