Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
94
Добавлен:
11.05.2015
Размер:
616.76 Кб
Скачать
    1. Установка размеров точечного рисунка (Bitmap)

Если Вы загружаете изображение, его размер может оказаться не тем, какой Вам нужен. Первым указал мне на эту проблему Vance Lankhaar. Его первое решение создавало очень маленькое изображение.

Листинг 5.30.1: Вставить GraphicObjectShape.

'Author: Vance Lankhaar

'email: vlankhaar@linux.ca

Dim oDesktop As Object, oDoc As Object

Dim mNoArgs()

Dim sGraphicURL As String

Dim sGraphicService As String, sUrl As String

Dim oDrawPages As Object, oDrawPage As Object

Dim oGraphic As Object

sGraphicURL = "http://api.openoffice.org/branding/images/logonew.gif"

sGraphicService = "com.sun.star.drawing.GraphicObjectShape"

sUrl = "private:factory/simpress"

oDesktop = createUnoService("com.sun.star.frame.Desktop")

oDoc = oDesktop.loadComponentFromURL(sUrl,"_default",0,mNoArgs())

oDrawPages = oDoc.DrawPages

oDrawPage = oDrawPages.insertNewByIndex(1)

oGraphic = oDoc.createInstance(sGraphicService)

oGraphic.GraphicURL = sGraphicURL

oDrawPage.add(oGraphic)

Первое решение (автор Laurent Godard) устанавливает размер изображения в максимально допустимый размер.

Листинг 5.30.2: Установить для изображения максимальный поддерживаемый размер.

'Maximum size, lose the aspect ration.

Dim TheSize As New com.sun.star.awt.Size

Dim TheBitmapSize As New com.sun.star.awt.Size

Dim TheBitmap as object

Dim xmult as double, ymult as double

TheBitmap=oGraphic.GraphicObjectFillBitmap

TheBitmapSize=TheBitmap.GetSize

xmult=TwipsPerPixelX/567*10*100

ymult=TwipsPerPixelY/567*10*100

TheSize.width=TheBitmapSize.width*xmult

TheSize.height=TheBitmapSize.height*ymult

oGraphic.setsize(TheSize)

Vance Lankhaar дал окончательное решение, которое максимизирует размер, но сохраняет пропорции изображения.

Листинг 5.30.3: Установить максимальный размер изображения при сохранении пропорций.

oBitmap = oGraphic.GraphicObjectFillBitmap

aBitmapSize = oBitMap.GetSize

iWidth = aBitmapSize.Width

iHeight = aBitmapSize.Height

iPageWidth = oDrawPage.Width

iPageHeight = oDrawPage.Height

dRatio = CDbl(iHeight) / CDbl(iWidth)

dPageRatio = CDbl(iPageHeight) / CDbl(iPageWidth)

REM This is is fit-maximum-dimension

REM s/</>/ for fit-minimum-dimension

If (dRatio < dPageRatio) Then

aSize.Width = iPageWidth

aSize.Height = CInt(CDbl(iPageWidth) * dRatio)

Else

aSize.Width = CInt(CDbl(iPageHeight) / dRatio)

aSize.Height = iPageHeight

End If

aPosition.X = (iPageWidth - aSize.Width)/2

aPosition.Y = (iPageHeight - aSize.Height)/2

oGraphic.SetSize(aSize)

oGraphic.SetPosition(aPosition)

      1. Вставить, изменить размер, указать позицию изображения в документе oOo Calc.

David Woody [dwoody1@airmail.net] должен был вставить графический объект в заданную позицию и с заданным размером. С небольшой помощью и большим объемом работы он нашел следующее решение:

Этот ответ занял некоторое время, так как я имел и другие проблемы, которые нужно было решить для установки корректных значений координат X и Y. Следующий код вставляет графический объект, устанавливает его размер, передвигает его в нужную позицию. Я должен добавить следующую сроку к коду программы из книги в секции об установки размеров точечного рисунка (bitmap).

Dim aPosition As New com.sun.star.awt.Point

Другой пробелмой было то, что я должен был определить пропорции, которые нужны были для правильного отображения координат aPosition.X и aPosition.Y на изображении. На моем компьютере значения 2540 и для X, и для Y соответствуют одному дюйму (2,51 см) на экране. Нижеприведенные значения поместят изображение на 1 дюйм от верхнего края листа и на 1 дюйм от левого края.

Листинг 5.30.1.1: Вставить изображение и расположить его в документе OOo Calc.

Sub InsertAndPositionGraphic

REM Get the sheet

Dim vSheet

vSheet = ThisComponent.Sheets(0)

REM Add the graphics object

Dim oDesktop As Object, oDoc As Object

Dim mNoArgs()

Dim sGraphicURL As String

Dim sGraphicService As String, sUrl As String

Dim oDrawPages As Object, oDrawPage As Object

Dim oGraphic As Object

sGraphicURL = "file:///OOo/share/gallery/bullets/blkpearl.gif"

sGraphicService = "com.sun.star.drawing.GraphicObjectShape"

oDrawPage = vSheet.getDrawPage()

oGraphic = ThisComponent.createInstance(sGraphicService)

oGraphic.GraphicURL = sGraphicURL

oDrawPage.add(oGraphic)

REM Size the object

Dim TheSize As New com.sun.star.awt.Size

TheSize.width=400

TheSize.height=400

oGraphic.setsize(TheSize)

REM Position the object

Dim aPosition As New com.sun.star.awt.Point

aPosition.X = 2540

aPosition.Y = 2540

oGraphic.setposition(aPosition)

End Sub

Соседние файлы в папке ooo