0
我已經修改了微軟的打印示例,用於打印多張照片,但圖像始終是對齊的人像,如何將它們對齊到橫向?根據微軟的照片應該自動旋轉。打印示例從https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/Printing。UWP打印多張圖片
下面是代碼:
''' <summary>
''' Generates a page containing a photo.
''' The image will be rotated if detected that there is a gain from that regarding size (try to maximize photo size).
''' </summary>
''' <param name="photoNumber">The photo number.</param>
''' <param name="pageDescription">The description of the printer page.</param>
''' <returns>A task that will return the page.</returns>
Private Async Function GeneratePageAsync(photoNumber As Integer, pageDescription As PageDescription) As Task(Of UIElement)
Dim page As New Canvas() With {
.Width = pageDescription.PageSize.Width,
.Height = pageDescription.PageSize.Height
}
Dim viewablePage As New Canvas() With {
.Width = pageDescription.ViewablePageSize.Width,
.Height = pageDescription.ViewablePageSize.Height
}
viewablePage.SetValue(Canvas.LeftProperty, pageDescription.Margin.Width)
viewablePage.SetValue(Canvas.TopProperty, pageDescription.Margin.Height)
' The image "frame" which also acts as a viewport
Dim blnLandScape As Boolean
If MainPage._picsperprint = 2 OrElse MainPage._picsperprint = 6 OrElse MainPage._picsperprint = 8 OrElse MainPage._picsperprint = 32 OrElse MainPage._picsperprint = 128 Then
blnLandScape = True
ElseIf MainPage._picsperprint > 0 Then
blnLandScape = False
'PrintPageSqareNumbers(e, PrintPage)
ElseIf MainPage._picsperprint = -1 Then
'PrintPageSized(e, PrintPage)
End If
' Return an async task that will complete when the image is fully loaded.
Dim blnSuccess As Boolean = False
Dim pos As Integer = (photoNumber - 1) * MainPage._picsperprint
For i As Integer = 0 To _Rows - 1
For ii = 0 To _Columns - 1
If pos + i * (_Columns) + ii >= MainPage.checkedItems.Count Then Exit For
Dim height As Integer = pageDescription.PictureViewSize.Height
Dim width As Integer = pageDescription.PictureViewSize.Width
height = height/_Rows
width = width/_Columns
Dim photoView As New Grid() With {
.Width = width,
.Height = height
}
' Center the frame.
Dim Left As Integer = (viewablePage.Width - photoView.Width * _Columns)/2
Dim Top As Integer = (viewablePage.Height - photoView.Height * _Rows)/2
Top += height * i
Left += width * ii
photoView.SetValue(Canvas.LeftProperty, Left)
photoView.SetValue(Canvas.TopProperty, Top)
Dim position As Integer = (pos + i * (_Columns) + ii)
Dim Item As ImgListItem = GetItemOfPosition(position)
Dim bitmap As WriteableBitmap = Await Item.LoadBitmapAsync(False)
If bitmap IsNot Nothing Then
Dim image As New Image() With {
.Source = bitmap,
.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Left,
.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Top
}
' Use the real image size when croping or if the image is smaller then the target area (prevent a scale-up).
If photoScale = Scaling.Crop OrElse (bitmap.PixelWidth <= width AndAlso bitmap.PixelHeight <= height) Then
image.Stretch = Stretch.None
image.Width = bitmap.PixelWidth
image.Height = bitmap.PixelHeight
End If
' Add the newly created image to the visual root.
blnSuccess = True
photoView.Children.Add(image)
viewablePage.Children.Add(photoView)
End If
Next ii
Next i
If blnSuccess Then
page.Children.Add(viewablePage)
' Return the page with the image centered.
Return page
Else
Return Nothing
End If
End Function
什麼是您正在使用的打印示例?你在哪裏看到圖片應該自動旋轉? – Scavenger
該代碼來自https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/Printing,並在評論中說'''如果檢測到圖像有增益,圖像將被旋轉關於尺寸(嘗試最大化照片尺寸)。 –