public static BitmapSourceInfo GetBitmapSourceInfoWithRgb32(BitmapSource bitmapSource) { var info = new BitmapSourceInfo() { DpiX = bitmapSource.DpiX, DpiY = bitmapSource.DpiY, Stride = bitmapSource.PixelWidth*1, PixelWidth = bitmapSource.PixelWidth, PixelHeight = bitmapSource.PixelHeight, PixelFormat = bitmapSource.Format, }; var buffer = new byte[info.Stride*info.PixelHeight]; bitmapSource.CopyPixels(buffer, info.Stride, 0); info.Buffer = buffer; return info; }
private void Inspect(InspectionSchema schema) { //IndicatorViewer.Loaded += (sender, args) => IndicatorViewer.ZoomFit(); // IndicatorViewer.Loaded += (sender, args) => IndicatorViewer.ZoomOut(); RegionIndicators.Clear(); LineIndicators.Clear(); CircleIndicators.Clear(); DefectIndicators.Clear(); ObjectIndicators.Clear(); BitmapSource bs; try { bs = new BitmapImage(new Uri(schema.TestImageFilePath, UriKind.RelativeOrAbsolute)); } catch (FileNotFoundException e) { throw new HalconInspectorException("Image file not exist", e); } if (Math.Abs(bs.DpiX - 96) > 0.00001 || Math.Abs(bs.DpiY - 96) > 0.00001) { var sw1 = new NotifyStopwatch("BitmapSource convert to Dpi96"); BitmapSourceInfo bsi = bs.ToGray8BppBitmapSourceInfo(); bsi.DpiX = 96; bsi.DpiY = 96; var bitmapSourceDpi96 = bsi.GetBitmapSource(); bs = bitmapSourceDpi96; sw1.Stop(); sw1.Dispose(); } IndicatorViewer.BitmapSource = bs; var sw2 = new NotifyStopwatch("BitmapSource.ToHImage()"); var hImage = bs.ToHImage(); sw2.Stop(); sw2.Dispose(); try { var sw = new NotifyStopwatch("InspectionController.Inspect()"); InspectionController .SetInspectionSchema() .SetImage(hImage) .CreateCoordinate() .Inspect() ; sw.Stop(); sw.Dispose(); // CoordinateCircles Show_CircleSearchingDefinitions( InspectionController.InspectionResult.GetCoordinateCircleSearchingDefinitions()); Show_CircleSearchingResults(InspectionController.InspectionResult.CoordinateCircles); // Circles Show_CircleSearchingDefinitions( InspectionController.InspectionResult.GetCircleSearchingDefinitions(), Brushes.Orange); Show_CircleSearchingResults(InspectionController.InspectionResult.Circles, Brushes.DodgerBlue); // CoordinateEdges Show_EdgeSearchingDefinitions(InspectionController.InspectionResult.GetCoordinateEdges()); Show_EdgeSearchingResults(InspectionController.InspectionResult.CoordinateEdges); // Edges Show_EdgeSearchingDefinitions(InspectionController.InspectionResult.GetEdgeSearchingDefinitions()); Show_EdgeSearchingResults(InspectionController.InspectionResult.Edges); // DistanceBetweenPoints Show_DistanceBetweenPointsResults(InspectionController.InspectionResult.DistanceBetweenPointsResults); // Defects Show_DefectResults(InspectionController.InspectionResult.RegionDefectResults); // Parts Show_PartSearchingDefinitions(InspectionController.InspectionResult.GetPartSearchingDefinitions()); Show_PartSearchingResults(InspectionController.InspectionResult.Parts); // RegionTargets Show_RegionTargetDefinitions(InspectionController.InspectionResult.GetRegionTargetDefinitions()); Show_RegionTargetResults(InspectionController.InspectionResult.RegionTargets); } catch (CreateCoordinateFailedException e) { Show_CircleSearchingDefinitions( InspectionController.InspectionResult.GetCoordinateCircleSearchingDefinitions()); Show_CircleSearchingResults(InspectionController.InspectionResult.CoordinateCircles); Show_EdgeSearchingDefinitions(InspectionController.InspectionResult.GetCoordinateEdges()); Show_EdgeSearchingResults(InspectionController.InspectionResult.CoordinateEdges); MessageBox.Show(e.Message); } }