Seite 5 von 12

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 12.07.2011 11:10
von Danilo
STARGÅTE hat geschrieben:ich glaube irgendwo gelesen zu haben, das man sogar bei GDI+ die Einheit angegeben kann, in der die Befehle arbeiten sollen.
Dort müsste dann alles auf Pixel und nicht auf Punkte gestellt werden.
Genau das habe ich gemacht, überall UnitPixel genommen. Scheint wohl nicht zu stimmen.

Code: Alles auswählen

enum Unit
{
    UnitWorld,      // 0 -- World coordinate (non-physical unit)
    UnitDisplay,    // 1 -- Variable -- for PageTransform only
    UnitPixel,      // 2 -- Each unit is one device pixel.
    UnitPoint,      // 3 -- Each unit is a printer's point, or 1/72 inch.
    UnitInch,       // 4 -- Each unit is 1 inch.
    UnitDocument,   // 5 -- Each unit is 1/300 inch.
    UnitMillimeter  // 6 -- Each unit is 1 millimeter.
};
Wenn Du Vorschläge hast, her damit. Ich wechsle aber nicht täglich das Thema,
sondern arbeite erstmal die Grundsachen ab. Jetzt steht bei mir gerade noch nicht
Drucker an. Ist ja noch nicht fertig.
Und heute brauche ich erstmal einen Tag Pause. Gehe nebenbei noch arbeiten. ;)

Wäre schön wenn noch paar mehr Leute mithelfen, es kommt ja dann allen zugute.

Aus MSDN:

Code: Alles auswählen

VOID Example_SetPageScale(HDC hdc)
  {
     Graphics graphics(hdc);
  
     // Set the world transformation.
     graphics.TranslateTransform(4.0f, 1.0f);
  
     // Set the page transformation.
     graphics.SetPageUnit(UnitMillimeter);
     graphics.SetPageScale(10.0f);
  
     Pen pen(Color(255, 0, 0, 0), 0.0f);
     graphics.DrawRectangle(&pen, 0, 0, 3, 2);
  }
Das halte ich schon für sinnvoller, z.b. in Millimetern oder Inch auf einem
Drucker zu zeichnen. Dann kann ich beispielsweise sagen 100 mal 100
und erhalte dann auf jedem Drucker wirklich eine Box von 10cm x 10cm.
Ansonsten muß man halt mit GetPageUnit und GetPageScale selbst umrechnen
oder mit gScale den Inhalt vom Bildschirm zum Drucker skalieren.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 12.07.2011 11:48
von STARGÅTE
UnitPixel ist auch richtig, denn für Stiftdicke stimmt es ja, aber das KoordinatenSystem, also die Größenangaben bei LineXY usw. die sind nicht konvertiert.

Und eigentlich könnte man sich auch PureLusts Vorschlag sparen mit dem GetDeviceCaps_().

Denn wenn ich in Pixeln arbeite will, dann muss meine Font ja auf einem Drucker kleiner werden, als auf dem Bildschirm.
Aber durch das einbauen von PureLusts Zeile sind nun alle Texte beim Drucker (mehr dpi, größeres FontSize) größer als Linien- oder Kreisdicken ... weil Fonts dann in Points arbeiten.

Das heißt das muss wieder raus und durch ein einheitliches Einheitensystem ersetzt werden.
Wenn Du Vorschläge hast, her damit. Ich wechsle aber nicht täglich das Thema,
sondern arbeite erstmal die Grundsachen ab. Jetzt steht bei mir gerade noch nicht
Drucker an. Ist ja noch nicht fertig.
Und heute brauche ich erstmal einen Tag Pause. Gehe nebenbei noch arbeiten.

Wäre schön wenn noch paar mehr Leute mithelfen, es kommt ja dann allen zugute.
Das sehe ich ein, aber gerade dieses "von allen Seiten" wird was reingestreut (wie auch von mir) führt gerade zu solchen Fehlern, das Sachen überhaupt nicht mehr zusammen passen.
Ich für meinen Teil, werde mal das mit den Einheiten versuchen zu lösen, sodass es dann gSetUnit(#UnitMillimeter) gibt und dann wirkich alle Befehle auch damit arbeiten.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 12.07.2011 12:04
von Danilo
STARGÅTE hat geschrieben:Das sehe ich ein, aber gerade dieses "von allen Seiten" wird was reingestreut (wie auch von mir) führt gerade zu solchen Fehlern, das Sachen überhaupt nicht mehr zusammen passen.
Ich für meinen Teil, werde mal das mit den Einheiten versuchen zu lösen, sodass es dann gSetUnit(#UnitMillimeter) gibt und dann wirkich alle Befehle auch damit arbeiten.
Du willst es ja scheinbar alles unbedingt jetzt sofort, dann mußt Du es eben machen. :)

Ich kann nicht hexen, aber gebe mir zumindest Mühe. Man, ich bin schon 34! :D
Wenn Du eine Weile warten kannst, dann schaue ich mir auch das genau an
und versuche alle Wünsche möglich zu machen.
Ich schreibe ja nicht einfach so mal 20 Funktionen, sondern muß mir auch ein
System ausdenken, wie das alles ordentlich zusammen paßt und was es für
Nebenwirkungen haben kann etc.

Ist ja bei mir nicht auch so, dass Du 5 Jahre auf eine Wunscherfüllung warten mußt,
siehe Shearing und so... ;)

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 12.07.2011 12:13
von STARGÅTE
Meine Hinweise waren auch nicht so zu verstehen, dass ich es jetzt brauche (hab ich auch nirgends geschrieben)
Sonden es sollte einfach nur auf eine lange Liste kommen, um nicht in Vergessenheit zu kommen.

Denn:
Ich schreibe ja nicht einfach so mal 20 Funktionen, sondern muß mir auch ein
System ausdenken, wie das alles ordentlich zusammen paßt und was es für
Nebenwirkungen haben kann etc.
genau das, scheinst du aber nicht umzusetzten, denn in den letzten Tagen ging mir das irgendwie zu schnell.
Das ist kein Vorwurf, sonden ehr ein Hinweis für uns beide! Denn ich reagiere nur auf die Neuerungen und zeige Fehler und Schwachstellen.

Wenn du unterstützung brauchst, dann wäre es nett, wenn du uns bestimmte Gebiete nennst, an denen wir arbeiten sollen/dürfen, damit wir uns nicht gegenseitig den Code zerschreiben.

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 12.07.2011 12:38
von Falko
Vielleicht könnte man einiges aus Flype's Source übernehmen.

http://www.purearea.net/pb/download/use ... diplus.zip

Ich hatte damals schon damit einiges probiert, bin aber nicht so
richtig weiter gekommen. Darum bin ich echt froh, das Danilo hier
den großen Schritt gemacht hat, eine komplexere GDI-PBI zu
programmieren. :allright:

Gruß Falko

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 13.07.2011 11:39
von Danilo
Wäre nett wenn ihr mal etwas testen könnt.

Print Test: http://www.mediafire.com/download.php?a5vtdqx73849prm

Der Test zeigt ein Fenster mit dem Text "gDrawing".
Um den Text ist eine Box.
Direkt darunter (an der oberen Box dran) ist eine Box von 10x10cm mit einer Linie durch.
Daneben steht die Auflösung in DPI.

Die untere Box (mit dem Strich durch) sollte am Bildschirm ca. 10x10cm sein -
es gibt aber beim Display evtl. kleinere Abweichungen von 2-3mm.

Wenn man das Fenster schließt kommt ein PrintDialog und man
kann das gleiche Bild nun auf seinem Drucker ausgeben.
Auf dem Papier sollte dann die untere Box auch genau 10x10cm sein,
unabhängig von der DPI-Einstellung des Druckers.

Auf dem Papier sollte es wie auf dem Bildschirm aussehen (außer andere DPI).
WYSIWYG, bis auf kleine Abweichungen am Bildschirm.
Voraussetzung beim drucken:
Ganz normal auf A4-Seite, keine Seitenskalierung (z.b. Borderless oder so)
durch die Druckereinstellungen.

Das muß überall auf dem Papier 10x10cm sein. Und die Liniebreite der
Box genau 1mm.

Danke an alle Tester! :)

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 13.07.2011 11:50
von Falko
Bestätigt.
600x600 DPI , Box ist 10x10 cm und Linie genau 1mm dick. Top :allright:
Gruß Falko

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 13.07.2011 12:07
von Christian H
Falko hat geschrieben:Bestätigt.
600x600 DPI , Box ist 10x10 cm und Linie genau 1mm dick. Top :allright:
Bei mir Exakt das gleich.
Am Monitor geringe Abweichung nach oben.
Gruß Christian

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 13.07.2011 13:53
von STARGÅTE
Test funktioniert leider ganz:
Hier die Resultate:
gDrawing() Print Test 600.pdf
gDrawing() Print Test 150.pdf
Die Abmessungen stimmen, aber die Dicken sind falsch.
(erzeugt mit FreePDF)

Re: [Windows] 2DDrawing Befehle mit AntiAliasing durch GDI+

Verfasst: 13.07.2011 15:50
von SoS
Danilo hat geschrieben:Man, ich bin schon 34! :D
Ja,viele vergessen das ältere Herren keine D-Züge sind. :lol:

Zum Test
Mein Drucker Canon iP4500 angeschlossen an der Fritzbox liefert mir bei 600 DPI genau das
was ich im Fenster sehe. Ich habe die Stärken nicht nachgemessen aber meine Augen sagen
mir, die sind alle gleich stark und etwar 1mm . :allright: