Bild mit Starbasic automatisch zuschneiden und einbinden?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

OObenutzer
Beiträge: 2
Registriert: So, 09.04.2006 19:14

Bild mit Starbasic automatisch zuschneiden und einbinden?

Beitrag von OObenutzer »

Folgendes Problem:

Eine Datei wird in einem Makro aus einem Template geladen. Dieses Template verfügt über mehrere teils ineinanderverschachtelte Textframes.
Der Zugriff und die Veränderungen funktionieren, Werte aus einem Dialog werden in die einzelnen Frames eintragen.

In einem Frame soll nun eine Grafik eingebunden werden, die automatisch aktualisiert wird. Das zugrundeliegende Bild ist in einem ungünstigen Webcam Format.

Das Bild soll nun automatisch zugeschnitten werden so dass ein Teil der linken Seite wegfällt, das ganze in einem anderen Format erscheint und aktualisiert wird.

Bisher verläuft dieses Zuschneiden extern über Scripte, das ist etwas umständlich weil das jedesmal ausgelöst werden musss, ich würde es gerne aus OpenOffice heraus realisieren.

Ich weiß, dass es beim Einfügen eines Bildes in ein Frame im interaktiven Programm die Option des Zuschneidens gibt. Nur leider hilft mr das wenig, denn das Bild wird nicht automatisch aktualisiert, im Gegensatz zu einer Einbindung des Bildes als ein Sub-TextFrame mit Hintergrund, was mich wiederum der Fähigkeit beraubt das Bild zuzuschneiden.

Besteht eine Möglichkeit ein solches Vorhaben* überhaupt mit Starbasicbefehlen zu realisieren?

*Das Einbinden eine Bildes in ein Textframe mit Zuschnitt

(oder das Erzwingen eines Neuladen des Bildes in einem Template ohne das Zuschnitt zu verändern)

Hat jemand eine Idee? Ich bedanke mich für jeden Vorschläge.

Mit freundlichen Grüßen
Georg
OObenutzer
Beiträge: 2
Registriert: So, 09.04.2006 19:14

Beitrag von OObenutzer »

Ich hab eine Lösung mir selbst erstellt, die zumindestens so funktioniert das der rechte Teil des Bildes abgeschnitten wird. Ich stelle sie deswegen hier hinein, weil ich persönlich es hasse, endlich in Foren genau auf mein Problem zu gestossen zu sein, aber keine Lösung angeboten wird.

Im Template wird im Rahmen genau an der Stelle an die das Bild soll ein neuer leerer Rahmen in der späteren Größe eingeführt. Der darf ein anders Format haben, zum Beispiel 3:3, oder 3:4. Je schmaler der Rahmen wird, destoweniger ist vom Originalbild zu sehen, das muss klar sein. Wichtig ist das die spätere Höhe im Quelltext exakt mit der Rahmengröße zusammenfällt, ausserdem sollte man die Umradung im Rahmen auf Null stellen.

Hier nun die Codeschnippsel:

Code: Alles auswählen


'Hier der Testaufruf

Sub TestLadeBildinTextFrame
Dim odoc
	oDoc = StarDesktop.CurrentComponent 
	BildinTextFrameLaden odoc, "tfBild1"
	BildinTextFrameLaden odoc, "tfBild2"

End Sub

Sub BildinTextFrameLaden(oDoc, sFrameName As String)
Dim oCursor, oGraphic, oText, oTextFrames, oTextFrame 

  'Vom übergebenen Dokument die Liste aller Textframes holen 
  oTextFrames=oDoc().getTextFrames()

  'Das entsprechende TextFrame anhand des Namens identifizieren
  oTextFrame=oTextFrames.getbyName(sFrameName)
  
  'übliche Aufrufe um einen TextCursor zu basteln
  oText = oTextFrame.getText() 
  oCursor = oText.createTextCursor() 
  oCursor.goToEnd(FALSE) 

 ' Grafik instantiieren
  oGraphic = oDoc.createInstance("com.sun.star.text.GraphicObject") 

 ' URL, Verankerung, Höhe und Breite festlegen
  With oGraphic 
    .GraphicURL = ConvertToURL( "C:\test\testbild.jpg" )
    .AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER 
    .Width = 4546  'Die Breite ist größer als der Rahmen
    .Height = 3460  
  End With 

  
  'Bild in Textrahmen einfügen 
  oTextFrame.insertTextContent( oCursor, oGraphic, False ) 
  
End Sub
Die Übergabe des oDoc als Parameter ist deshalb notwendig weil im Original der Aufruf von einer anderen Stelle erfolgt.

Das Bild wird nun links on die obere Ecke des Rahmen geheftet und der Rest der nach rechts über den Rahmen hinausragt wird nicht mehr angezeigt.

Ich weiß leider nicht, ob es auch die Möglichkeit gibt das Bild mit der rechten oberen Ecke rechts an den Rahmen zu heften, so dass der linke Rand nicht mehr dargestellt wird, weil er dann links aus dem Rahmen herausragt, vielleicht über Properties die die das Bild rechtsbündig einbinden. Vielleicht weiss jemand anders da mehr.

Ich selbst verwende diese Technik in einem Projekt in der Ausweise gedruckt werden und die Fotos von einer Webcam stammen.

So nun hab ich mir einen Kaffee verdient.

Mit freundlichen Grüßen
Georg
Antworten