Deutsch
Forum

Bild maximal auf Druckseite einpassen mit der Aspectratio

 

Rainer
Hoefs
Hallo zusammen,
ich benötige mal wieder Hilfe der Community.

Leider muß ich vorher etwas ausholen.
Dabei benutze ich im Folgenden diese Begriffe:

Teppichdesign = ist die Bitmap mit dem Muster
Teppichgröße = die reaele Teppichgröße in cm
Druckseite = lt. Profan 680 X 960 Punkte. (6800 X 9600 intern)

Die Pixelmaße des Teppichdesigns (z.B. 771x / 1221y) haben nichts mit der Teppichgröße zu tun, die in diesem Beispiel 200 * 300 cm sein soll das hängt einfach von der Webmaschine und der Webdichte ab.

Ich lade das Teppichdesign in ein "hPic.Teppichdesign" und berechne über verschiedenen Vergleichskriterien zwischen der "Aspectratio.Teppichdesign zu Aspectratio.Teppichgröße" die Größe eines neuen "hPic.Teppichgröße" in die das "hPic.Teppichdesign" mit "DrawSizedPic" hineingeschrieben wird. Dabei wird grundsätzlich niemals die Anzahl der X oder Y vom Teppichdesign verkleinert, sondern nur eine der beiden Dimensionen, X oder Y, vergrößert, damit es niemals zu Verlust von Bildpunkten, Bildqualität kommt. Das klappt alles wunderbar. Die "hPic.Teppichgröße" hat also genau das Seitem-Längenverhältnis der Teppichmaße cm.

Nun möchte ich die neu erstellte Bitmap mit der richtigen "Aspectratio.Teppichgröße" auf einer Druckseite eines beliebigen Druckers so ausdrucken, das diese maximal seitenfüllend unter Berücksichtigung der "Aspectratio.Teppichgröße" auf das Papier kommt. Und genau das bekomme ich es einfach nicht hin.

Die Prozedur, die meine Maße für die Bitmap mit der richtigen Teppichgröße berechnet müsste eigentlich auch für diese Berechnung funktionieren. Sie empfängt 4 Parameter, die Teppichbreite cm = "CarpetWidth%", Teppichhöhe cm = "CarpetHeight%", Designbreite pix = "DesignWidth%", Designhöhe pix = "DesignHeight%.

Ich habe schon probiert nicht die Teppichgröße cm x cm sondern die 680 X 960 Pixel die Profan benutzt oder die internen 6800 X 9600 internen Pixel von Profan einzusetzen.

Weiterhin habe ich es mit den echten möglichen Druckerpixel pro Seite probiert die mit:
HorzSize& = ~GetDeviceCaps(&PDC, ~HORZSIZE)
VertSize& = ~GetDeviceCaps(&PDC, ~VERTSIZE)
ausgelesen werden.

Alles hat keinen Erfolg gebracht. Nun weiß ich nicht mehr weiter. Ich hoffe es einigermaßen verständlich beschrieben zu haben.

Vielleicht kennt jemand eine Lösung.

Danke schon mal im Voraus.
 $H Windows.ph
Declare Design2Load$, Design2Write$, NewFileName$, Save2FileName$, OriginalDesign&, File2Convert&
Declare PictureWidth%, PictureHeight%, CarpetWidthCM%, CarpetHeightCM%, A%, B%, C%, D%, HorzSize&, VertSize&

Proc CalculatePictureSize

    Parameters CarpetWidth%, CarpetHeight%, DesignWidth%, DesignHeight%
    Declare DesignAspect!, CarpetAspect!, Mode$
    CarpetAspect! = (CarpetWidth% / CarpetHeight%)
    DesignAspect! = (DesignWidth% / DesignHeight%)

    If CarpetAspect! < 1'Hoch

        If DesignAspect! < 1'Hoch

            If CarpetAspect! < DesignAspect!

                Mode$ = "01"
                PictureWidth% = DesignWidth%
                PictureHeight% = ((DesignWidth% / CarpetWidth%) * CarpetHeight%)

            ElseIf CarpetAspect! = DesignAspect!

                Mode$ = "02"
                PictureWidth% = DesignWidth%
                PictureHeight% = DesignHeight%

            ElseIf CarpetAspect! > DesignAspect!

                Mode$ = "03"'OK
                PictureWidth% = ((DesignHeight% / CarpetHeight%) * CarpetWidth%)
                PictureHeight% = DesignHeight%

            EndIf

        ElseIf DesignAspect! > 1'Quer

            If CarpetAspect! < DesignAspect!

                Mode$ = "04"
                PictureWidth% = DesignWidth%
                PictureHeight% = ((DesignWidth% / CarpetWidth%) * CarpetHeight%)

            EndIf

        EndIf

    ElseIf CarpetAspect! = 1'Quadrat

        If DesignAspect! < 1'Hoch

            Mode$ = "05"
            PictureWidth% = DesignHeight%
            PictureHeight% =  DesignHeight%

        ElseIf DesignAspect! = 1'Quadrat

            Mode$ = "06"
            PictureWidth% = DesignWidth%
            PictureHeight% = DesignHeight%

        ElseIf DesignAspect! > 1'Quer

            Mode$ = "07"
            PictureWidth% = DesignWidth%
            PictureHeight% =  DesignWidth%

        EndIf

    ElseIf CarpetAspect! > 1'Quer

        If DesignAspect! < 1'Hoch

            If CarpetAspect! < DesignAspect!

                Mode$ = "08"
                PictureWidth% = DesignWidth%
                PictureHeight% = ((DesignWidth% / CarpetWidth%) * CarpetHeight%)

            ElseIf CarpetAspect! = DesignAspect!

                Mode$ = "09"
                PictureWidth% = DesignWidth%
                PictureHeight% = DesignHeight%

            ElseIf CarpetAspect! > DesignAspect!

                Mode$ = "10"'OK
                PictureWidth% = ((DesignHeight% / CarpetHeight%) * CarpetWidth%)
                PictureHeight% = DesignHeight%

            EndIf

        ElseIf DesignAspect! > 1'Quer

            If CarpetAspect! < DesignAspect!

                Mode$ = "11"
                PictureWidth% = DesignWidth%
                PictureHeight% = ((DesignWidth% / CarpetWidth%) * CarpetHeight%)

            ElseIf CarpetAspect! = DesignAspect!

                Mode$ = "12"
                PictureWidth% = DesignWidth%
                PictureHeight% = DesignHeight%

            ElseIf CarpetAspect! > DesignAspect!

                Mode$ = "13"
                PictureWidth% = ((DesignWidth% / CarpetHeight%) * DesignHeight%)
                PictureHeight% = DesignHeight%

            EndIf

        EndIf

    EndIf

EndProc

Window 100, 10 - 1700, 1000
Design2Load$ = LoadFile$(%hwnd, "Datei zum konvertieren laden...","Designs|*.APF;*.BMP;*.JPG;*.PNG;*.GIF",0)'Design auswählen

If Design2Load$ <> ""

    OriginalDesign& = Create ("hPic", -1, Design2Load$, 0)'Bitmap mit Originaldesign erstellen
    DrawPic OriginalDesign&, 1, 1; 0'Originaldesign anzeigen
    CarpetWidthCM% = Input$("CarpetWidth cm: ", "100", 1)'Tepichbreite abfragen
    CarpetHeightCM% = Input$("CarpetHeight cm: ", "100", 1)'Tepichlänge abfragen
    CalculatePictureSize CarpetWidthCM%, CarpetHeightCM%, %bmpx, %bmpy'Neue Designgröße berechnen
    File2Convert& = Create ("hSizedPic",-1, Design2Load$, PictureWidth%, PictureHeight%, 0)'Design in der neuen Größe erstellen
    CLS
    DrawPic File2Convert&, 1, 1; 0'Design mit neuer Größe anzeigen
    NewFileName$ = SaveFile$(%hwnd, "Speichere Design als...", "PNG-Datei (*.PNG)|*.PNG|JPEG-Datei (*.JPG)|*.JPG|BMP-Datei (*.BMP)|*.BMP", 1)

    If NewFileName$ <> ""

        SavePic NewFileName$, File2Convert&'Design mit neuer Größe als BMP, PNG, JPG speichern

    EndIf

    If MessageBox ("Soll das Design gedruckt werden?", "DRUCKEN", 292) = 6

        StartPrint "* " + NewFileName$

        If %printing

            DrawSizedPic File2Convert&, 0, 0, %bmpx/2, %bmpy/2; 0
            EndPrint

        EndIf

    EndIf

    DeleteObject File2Convert&'Das Objekt löschen
    DeleteObject OriginalDesign&'Das Objekt löschen

EndIf

End
 
23.02.2018  
 




H.Brill
Verwende mal Create("hSizedPic",...) mit dem
letzten Paraemeter Modus mit 1.

Das müßte doch das Bild unter Berücksichtigung der
Seitenverhältnisse korrekt einpassen.

Außerdem würde ich bei der Druckseite noch die
Seitenränder abziehen. Da hat der Druckertreiber
mir auch schon Streiche mit mir gemacht.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
24.02.2018  
 




Rainer
Hoefs
Hallo H Brill,
die Bitmap die zum Drucker geschickt wird hat bereits die richtigen Dimensionen laut TeppichgrößeCM.

Diese gilt es in dem Druckbereich einer Druckseite richtig einzupassen.

Sollte dann dein Vorschlag Zwischen Starprint und Endprint passieren?
Auf was berechne ich dann die Ausgabe auf die 680 960 oder 6800 9600 oder auf die über GetDeviceCaps errechneten möglichen Druckerpixel?

Verstehe es so nicht wirklich.

MfG
 
24.02.2018  
 




H.Brill
Naja, wenn ich die 680 durch 21 (Breite eines Blatt Papieres)
teile, komme ich auf etwa 32 Druckerpixel pro cm. Das gleiche
kommt auch bei der Höhe eines Blattes raus. Da würde ich
ca. 35 Pixel pro Rand abziehen.

Was die Dimensionierung betrifft :

Create("hSizedPic",...) macht das doch für dich, egal wie
groß die Bitmap als Datei ist. Das wird prozentual dann
eingepaßt. Das kannst du also schon beim Laden der Bitmap
machen.

Also, ich würde da mal etwas anders dran gehen. Mach doch
mal ein hPic mit 680 -70, 960 -70 . Das Bild malst du auf eine
Leinwand, also
Static& = Create("Static",%HWnd, 680, 960)
an Position 35, 35.
Also dann mit
StartPaint Static&
DrawPic Bitmaphnadle, 35, 35, ....
EndPaint
drauf zeichnen. Da es ja nur eine Seite ist, würde ich das
dann mit WinCopy Static& drucken.

Wäre auch mal eine Möglichkeit.

Wenn gewünscht ist, das Staticfenster nicht zu sehen, kann
man es ja nach dem Erstellen mit ShowWindow verstecken.
Und nach dem Druck einfach wieder mit DestroyWindow
das Static wieder freigeben.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
24.02.2018  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.535 Betrachtungen

Unbenanntvor 0 min.
Sebald Grandjean vor 31 Tagen
Stringray05.01.2022
iF31.10.2020
Thomas Zielinski29.08.2019
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

H.Brill (2x)
Rainer Hoefs (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie