У меня есть два класса: ChartObject & GrowthChartPane.
В ChartObject есть метод GetChart (), который преобразует растровое изображение в Drawing.Image, которое возвращается.
Public Function GetChart() As Drawing.Image
Dim chartImage As Drawing.Image
Dim gr As Graphics
Dim brush As Brush = Brushes.Blue
If m_bIsBoy Then
brush = Brushes.Red
End If
Using fs As New FileStream(m_sChartImageFileName, FileMode.Open, FileAccess.Read)
chartImage = Bitmap.FromStream(fs)
gr = Graphics.FromImage(chartImage)
End Using
For Each Point As PointObject In m_lstUpperPoints
If Not Point.IsVisible Then Continue For
Dim x As Integer = m_objUpperHorizontalAxis.ValueToPoint(Point.HorizontalValue)
Dim y As Integer = m_objUpperVerticalAxis.ValueToPoint(Point.VerticalValue)
gr.FillEllipse(brush, New RectangleF(x - 4, y - 4, 8, 8))
Next
For Each Point As PointObject In m_lstLowerPoints
If Not Point.IsVisible Then Continue For
Dim x As Integer = m_objLowerHorizontalAxis.ValueToPoint(Point.HorizontalValue)
Dim y As Integer = m_objLowerVerticalAxis.ValueToPoint(Point.VerticalValue)
gr.FillEllipse(brush, New RectangleF(x - 4, y - 4, 8, 8))
Next
DrawHeaderAndTable(gr)
Return chartImage
End Function
GrowthChartPaneво время загрузки вызывает ChartObject.GetChart () для создания экземпляра объекта Drawing.Image.При попытке сохранить изображение, возвращаемое из диаграммы роста, возникает исключение.Метод довольно большой, но вот фрагмент с конца, где исключение.
Dim fn As String = PediatricGrowthChartsImageHandler.GetPGCImagePath(CurrentPatient.EntityID, m_iChartTypeId)
If Not IsNothing(customDrowingChart) Then
Dim chartImage As Drawing.Image = customDrowingChart.GetChart()
hdnImgChartH.Value = chartImage.Height.ToString 'test
hdnImgChartW.Value = chartImage.Width.ToString 'test
chartImage.Save(fn, System.Drawing.Imaging.ImageFormat.Png)
chartImage.Dispose()
imgChart.ImageUrl = String.Format("PediatricGrowthChartsImageHandler.axd?PatientID={0}&PGCTypeID={1}&rnd={2}", CurrentPatient.EntityID, m_iChartTypeId, New Random().NextDouble().ToString())
Else
Chart1.SaveImage(fn, ChartImageFormat.Png)
End If
End If
If Not IsNothing(DataToBeFilled) Then DataToBeFilled.dispose()
End Sub
Я подтвердил, что файл НЕ существует, но исключение все еще генерируется в Image.Save ()
Я провел некоторое исследование по этой теме, и было так много разных решений, но это вызвало у меня беспокойство по поводу открытости потока.Я читал, что поток должен быть открыт для сохранения изображения и что вы можете напрямую передавать поток в метод Save (), но мне любопытно, как происходит это взаимодействие между двумя классами.