Top > OOoBasic > Generic > Image

画像 Edit

画像サイズ Edit

ダイアログのイメージコントロールなどにサイズをあわせてリサイズされていない画像を表示するときなどに利用できます。

com.sun.star.graphic.GraphicProvider サービスを利用して画像の情報を調べることができます。

Sub Main
  oGP = CreateUnoService("com.sun.star.graphic.GraphicProvider")
  sImgURL = "file://C:/usr/current_16.png"
  oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
  oImgInput = oSFA.openFileRead(sImgURL)
  Dim aImgDesc(0) As New com.sun.star.beans.PropertyValue
  aImgDesc(0).Name = "InputStream"
  aImgDesc(0).Value = oImgInput
  oGraphic = oGP.queryGraphic(aImgDesc)
  aSizePixel = oGraphic.SizePixel
  
  msgbox "Width:" &  aSizePixel.Width & chr(10) & _
    "Height: " & aSizePixel.Height
  oImgInput.closeInput()
End Sub

SizePixel は pixel での画像サイズを、Size100thMM は 1/100 mm 単位での画像サイズを com.sun.star.awt.Size struct で保持しています。

画像のリサイズ Edit

OOo では画像のサイズを変更することができます。上記の GraphicProvider サービスを利用します。

shared/config/images.zip Edit

OpenOffice.org/shared/config/images.zip ファイルには OOo で使われているアイコンなどの画像が含まれています。パッケージテーマごとにありますが、ダイアログのイメージコントロールでこの画像を使ってみます。

これらの画像は特殊な URL を使用してアクセスできます。URL は次のように始めます。

private:graphicrepository

たとえば、ある画像を指定するには private:graphicrepository/sc/res/refinp1.png のような形式になります。画像は zip ファイルを解凍して調べてみてください。

ZIP ファイル中の画像 Edit

com.sun.star.ucb.PackageContentProvider で利用される vnd.sun.star.pkg で始まる URL を利用します。この URL はパッケージまでの URL は、含まれる "/" を "&2F" で置換し、パッケージ内のパスはそのまま "/" を利用します。

Sub Main
  'oSFA = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
  oPS = CreateUnoService("com.sun.star.util.PathSubstitution")
  
  sPkg = oPS.substituteVariables("$(inst)/share/config/images.zip",True)
  sURL = "vnd.sun.star.pkg://" & ReplaceSlashes(sPkg) & "/res/ods_48_8.png"
  
  Globalscope.DialogLibraries.LoadLibrary("Standard")
  oDialog = CreateUnoDialog(Globalscope.DialogLibraries.Standard.Dialog1)
  'msgbox oSFA.exists(sURL)
  oImg = oDialog.getControl("ImageControl1")
  oImg.Model.ImageURL = sURL
  oImg.Model.ScaleImage = False
  
  oDialog.execute()
End Sub


Function ReplaceSlashes( sURL ) As String
  nPos = InStr(sURL,"/")
  While nPos <> 0
    sURL = Mid(sURL,1,nPos -1) & "%2F" & Mid(sURL,nPos +1)
    nPos = InStr(nPos +2,sURL,"/")
  WEnd
  ReplaceSlashes = sURL
End Function

上記 sURL は次のようになります。

vnd.sun.star.pkg://file:%2F%2F%2FC:%2FProgram%20Files%2F
OpenOffice.org%202.3%2Fshare%2Fconfig%2Fimages.zip/res/ods_48_8.png

URL Schema 詳細は Developers Guide UCB の章または 付録 Universal Content Providers 参照。

ドキュメント中からの画像のコピー Edit

Sub GetImages
 oDoc = ThisComponent
 
 oSfa = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
 sInternalURL = oDoc.StringValue
 
 sPicturesDir = sInternalURL & "Pictures"
 sFiles = oSfa.getFolderContents(sPicturesDir, False)
 
 BasicLibraries.loadLibrary("Tools")
 For i = 0 To UBound(sFiles) step 1
   sFileName = FileNameoutofPath(sFiles(i), "/")
   oSfa.copy(sFiles(i), "file:///home/asuka/Desktop/" & sFileName)
 Next
End Sub

メッセージボックスの画像 Edit

メッセージボックスに表示される画像はまとめられた画像ですが、以下の方法で部分ごとの画像が取得できます。

private:standardimage/query

info, warning, error, query が利用できます。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes