Frage stellen
0

Calc Macro (Basic): Wie kann ich die Originalgröße eines via URL geladenen Bildes bestimmen?

gefragt 2019-08-04 23:03:15 +0200

Reth Gravatar-Bild

Hallo zusammen,

in Calc lade ich via Basic Macro ein Bild via URL und lasse es anzeigen. Das klappt ganz gut, nur muss ich die Größe des Bildes raten um es in vernünftiger Größe und richtigem Seitenverhältnis anzuzeigen. Wie kann ich denn die Breite und Höhe der aus dem Web geladenen Bilddatei (z.B. .jpg) bestimmen bzw. auslesen (jedes Bild bringt diese Information ja mit)?

Vielen Dank schon mal!

Bearbeiten Tags ändern Melden schließen vereinen löschen

1 Antwort

0

geantwortet 2019-08-05 01:01:22 +0200

Regina Gravatar-Bild

updated 2019-08-05 19:14:43 +0200

Das Objekt sollte eine Eigenschaft 'Graphic' haben und darin die Eigenschaften 'Size100thMM', 'SizePixel' und 'Size'. Mal komplett:

REM  *****  BASIC  *****
option explicit

sub main
dim sURL as string
sURL = convertToURL("D:\Desktop\KannwegNachTest\Basilikum_klein.JPG")
insertImage(sURL)
end sub

sub insertImage(byval sURL as string)
dim oDoc as variant: oDoc=thisComponent
dim oPage as variant: oPage=oDoc.DrawPages(0)
dim NewGraphicObject as variant
NewGraphicObject = oDoc.createInstance("com.sun.star.drawing.GraphicObjectShape")
NewGraphicObject.GraphicURL = sURL
dim aPos as new "com.sun.star.awt.Point"
aPos.x = 3000
aPos.y = 3000
NewGraphicObject.Position = aPos
oPage.add(NewGraphicObject) 
NewGraphicObject.Name = "myTestImage"
dim aGraphic as variant: aGraphic = NewGraphicObject.Graphic
dim aSize100thMM as new "com.sun.star.awt.Size"
aSize100thMM=aGraphic.size100thMM: 'read-only'
dim sInfo as string: sInfo ="size in 'Graphic'" & chr(10)
sInfo= sinfo & "Size100thMM width=" & aSize100thMM.width & " height=" & aSize100thMM.height & chr(10)
dim aSizePixel as new "com.sun.star.awt.Size"
aSizePixel = aGraphic.sizePixel: 'read-only'
sInfo = sInfo & "SizePixel width=" & aSizePixel.width & " height=" & aSizePixel.height & chr(10)
dim aSize as new "com.sun.star.awt.Size"
aSize = aGraphic.size: 'read-only'
sInfo = sInfo  & "Size width=" & aSize.width & " height=" & aSize.height
msgbox(sInfo)
dim aNewSize as new "com.sun.star.awt.Size": 'size in NewGraphicObject
dim aWidthDivHeight as double
aWidthDivHeight = aSize100thMM.Width / aSize100thMM.Height
aNewSize.Height =5000: '100thMM
aNewSize.Width = aNewSize.Height * aWidthDivHeight
NewGraphicObject.setSize(aNewSize)
end sub
Bearbeiten Melden löschen Link mehr

Kommentare

Vielen Dank. Funktioniert leider nicht ganz. Habe folgenden Code (Ausschnitt):

NewGrafik = doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
NewGrafik.GraphicURL = <URL zum Bild>
NewGrafik.name = "Test"
point.x = 300
point.y = 300
NewGrafik.setPosition(point) 
page.add(NewGrafik)
oBildGroesse = NewGrafik.getSize()
oGraphic = NewGrafik.Graphic

wenn ich nun oBildGroesse.height und oBildGroesse.width ausgeben lasse erhalte ich 100 und 100.

Und wenn ich oGraphic.SizePixel ausgeben lasse erhalte ich ne leere MsgBox und dann den Fehler: "Falscher Wert für Eigenschaft" Bei der Ausgabe von oGraphic.Size100thMM erscheint der Fehler: "Falscher Wert für Eingabe"

Wo hab ich denn da noch Bugs drin? (Finde die ganze API bisher mords kompliziert)

Reth Gravatar-BildReth ( 2019-08-05 08:29:05 +0200 )Bearbeiten

Welches Dateiformat hat dein Bild? Hole dir mal alle drei Varianten, nicht als Funktionsaufruf mit getSize() sondern direkt als Eigenschaft, zum Beispiel mit NewGraphic.Size100thMM.

Regina Gravatar-BildRegina ( 2019-08-05 16:23:22 +0200 )Bearbeiten

Das Bild ist jpg. Wenn ich probiere auf NewGrafik.SizePixel oder NewGrafik.Size100thMM zuzugreifen, dann erscheint der Fehler: Eigenschaft oder Methode nicht gefunden

Ok, habs (hatte nicht bis zu Ende gedacht bzw. mir die Typen nicht angeschaut): oGraphic.SizePixel.width <= funktioniert bestens!

Danke euch!

Reth Gravatar-BildReth ( 2019-08-05 18:41:35 +0200 )Bearbeiten
Registrieren oder einloggen, um zu antworten

Antwortwerkzeuge

1 Beobachter

Statistik

Gefragt: 2019-08-04 23:03:15 +0200

Angesehen: 25 Mal

Aktualisiert: Aug 05