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