no after trying to integrate that in my code, i get this exception:
System.InvalidOperationException was unhandled by user code<br />
Message=The calling thread must be STA, because many UI components require this.<br />
Source=PresentationCore<br />
StackTrace:<br />
at System.Windows.Input.InputManager..ctor()<br />
at System.Windows.Input.InputManager.GetCurrentInputManagerImpl()<br />
at System.Windows.Input.KeyboardNavigation..ctor()<br />
at System.Windows.FrameworkElement.FrameworkServices..ctor()<br />
at System.Windows.FrameworkElement.EnsureFrameworkServices()<br />
at System.Windows.FrameworkElement..ctor()<br />
at System.Windows.Controls.Viewport3D..ctor()<br />
at WpfApplication1.MainWindow.TextOverImg(ImageSource imagePlate, String imgSave, Double trans, FormattedText fText, FormattedText sText, String[] imgCoords, Int32 Lines) in C:\Users\CRAX\Documents\Visual Studio 2010\Projects\task test\MainWindow.xaml.vb:line 59<br />
at WpfApplication1.MainWindow._Closure$__1._Lambda$__1() in C:\Users\CRAX\Documents\Visual Studio 2010\Projects\task test\MainWindow.xaml.vb:line 313<br />
at System.Threading.Tasks.Task.InnerInvoke()<br />
at System.Threading.Tasks.Task.Execute()<br />
InnerException:
here is my code, it includes two functions and button.click event for calling the parallel:
Public Function TextOverImg(imagePlate As ImageSource, ByVal imgSave As String,
ByVal trans As Double, ByVal fText As FormattedText, ByVal sText As FormattedText,
ByVal imgCoords() As String, ByVal Lines As Integer)
Dim rec As Rect = New Rect(0, 0, 720, 576)
Dim txtRec As Rect = New Rect(0, 0, 1000, 1000)
Dim dvText As New DrawingVisual()
Dim dcText As DrawingContext = dvText.RenderOpen()
Dim sc As Integer = 300 / 96
txtRec = New Rect(0, 0, fText.MaxTextWidth, fText.Height)
fText.TextAlignment = TextAlignment.Center
sText.TextAlignment = TextAlignment.Center
Dim trns As String = 100
dcText.DrawRectangle(Brushes.WhiteSmoke, New Pen(Brushes.Black, 10.0), txtRec)
dcText.DrawText(sText, New Point(txtRec.X + 3, txtRec.Y + 3))
dcText.DrawText(fText, New Point(txtRec.X, txtRec.Y))
dcText.Close()
Dim textPlate As New RenderTargetBitmap(720, 576, 96, 96, PixelFormats.Pbgra32)
textPlate.Render(dvText)
If Not (trans = 0) Then
Dim viewport3d As New Viewport3D
viewport3d.Width = rec.Width
viewport3d.Height = rec.Height
viewport3d.Measure(New Size(rec.Width, rec.Height))
viewport3d.Arrange(rec)
Dim cam As New OrthographicCamera
cam.Position = New Point3D(0.5, 0.5, 1)
viewport3d.Camera = cam
Dim mv3d As New ModelVisual3D
Dim mgrp3d As New Model3DGroup
Dim gm3d As New GeometryModel3D
Dim light As New AmbientLight
light.Color = Colors.White
mgrp3d.Children.Add(light)
Dim mesh3d As New MeshGeometry3D()
Dim meshpoints As New Point3DCollection
mesh3d.Positions.Add(New Point3D(0, 0, 0))
mesh3d.Positions.Add(New Point3D(0, 1, 0))
mesh3d.Positions.Add(New Point3D(1, 0, 0))
mesh3d.Positions.Add(New Point3D(1, 1, 0))
mesh3d.TextureCoordinates.Add(New Point(0, 1))
mesh3d.TextureCoordinates.Add(New Point(0, 0))
mesh3d.TextureCoordinates.Add(New Point(1, 1))
mesh3d.TextureCoordinates.Add(New Point(1, 0))
mesh3d.TriangleIndices.Add(0)
mesh3d.TriangleIndices.Add(2)
mesh3d.TriangleIndices.Add(1)
mesh3d.TriangleIndices.Add(2)
mesh3d.TriangleIndices.Add(3)
mesh3d.TriangleIndices.Add(1)
gm3d.Geometry = mesh3d
Dim mat As New DiffuseMaterial
mat.Brush = New ImageBrush(textPlate)
gm3d.Material = mat
Dim dvMerge As New DrawingVisual()
Dim dcMerge As DrawingContext = dvMerge.RenderOpen()
dcMerge.DrawImage(imagePlate, rec)
Dim imgC() As String = imgCoords(0).Split("&")
Dim imgCoordsln() As String = imgC(2).Split(Environment.NewLine)
Dim pointsTransformed As Point3D() = New Point3D(3) {}
For i = 1 To 4 Step 1
Dim points() As String
points = imgCoordsln(i).Split(",")
pointsTransformed(i - 1) = New Point3D(Val(points(0)), Val(points(1)), Val(points(2)))
Next
Dim xfrm As New MatrixTransform3D
xfrm.Matrix = CalculateNonAffineTransform(pointsTransformed)
gm3d.Transform = xfrm
mgrp3d.Children.Add(gm3d)
mv3d.Content = mgrp3d
viewport3d.Children.Add(mv3d)
dcMerge.Close()
Dim Mergedbmp As New RenderTargetBitmap(720 * sc, 576 * sc, 96 * sc, 96 * sc, PixelFormats.Pbgra32)
Mergedbmp.Render(dvMerge)
Mergedbmp.Render(viewport3d)
Dim imgResize As New TransformedBitmap()
imgResize.BeginInit()
imgResize.Source = Mergedbmp
imgResize.Transform = New ScaleTransform(0.3335, 0.3335)
imgResize.EndInit()
Dim path As String = imgSave
Dim fs As FileStream = New FileStream(path, FileMode.Create)
Dim encoder As BitmapEncoder = New PngBitmapEncoder()
encoder.Frames.Add(BitmapFrame.Create(imgResize))
encoder.Save(fs)
Return Mergedbmp
End If
Return imagePlate
End Function
does any one know why this happens???