Пример #1
0
        // **************************************************************************


        // Filter out everything that isnt in region of interest
        private void UpdateROI()
        {
            Vector2   center  = roiSphere.center;
            float     radius  = roiSphere.radius;
            Rectangle newRect = new Rectangle((int)(center.X - radius), (int)(center.Y - radius), (int)(radius * 2), (int)(radius * 2));

            CCContext.setupTexture(roiMaskTexName, newRect.Size, IntPtr.Zero);
            CCContext.setupTexture(roiTexName, newRect.Size, IntPtr.Zero);
            CCContext.setupTexture(thresholdTexName, newRect.Size, IntPtr.Zero);

//			int channels = 4;
//				segmentationPixelData = new byte[(int)(newRect.Size.Width*newRect.Size.Height*channels)];
            segmentationPixelData = new uint[(int)(newRect.Size.Width * newRect.Size.Height)];

            debugTexture.Size = newRect.Size;

            roiRect = newRect;

            CountLayerHelper.updateROIMask(roiRect, ccContext.ImageSize, frameBuffer, roiMaskTexName, maskTexName);
            CountLayerHelper.updateROIImage(roiRect, frameBuffer, ccContext.ImageTexName, ccContext.ImageSize, roiTexName, roiMaskTexName);
        }
Пример #2
0
        private void CreateSaveImage(ICollection <Tag> tagArray)
        {
            if (SaveCountResult == null)
            {
                return;
            }

            Size size          = ccContext.ImageSize;
            uint outputTexName = 0;

            // Generate texture
            GL.GenTextures(1, out outputTexName);
            CCContext.setupTexture(outputTexName, size, IntPtr.Zero);

            // Setup viewport
            int[] oldViewPort = new int[4];
            GL.GetInteger(GetPName.Viewport, oldViewPort);
            GL.Viewport(0, 0, size.Width, size.Height);
            int fboOld = GLHelper.bindFrameBuffer(frameBuffer, outputTexName);

            GL.Disable(EnableCap.Blend);

            Matrix4 projectionMatrix = Matrix4.CreateOrthographicOffCenter(0, (float)size.Width, 0, (float)size.Height, -1.0f, 1.0f);
//			Matrix4 projectionMatrix = ccContext.ProjectionMatrix;
            Matrix4 modelViewMatrix = Matrix4.Identity;

            // Draw image
            {
                Matrix4   mat       = modelViewMatrix * projectionMatrix;
                Rectangle imageRect = new Rectangle(0, 0, (int)size.Width, (int)size.Height);
                GLHelper.DrawSprite(ccContext.ImageTexName, imageRect, mat);
            }

            // Draw ROI
            Vector4    outlineColor = ColorHelper.ColorToVec(ColorHelper.ROIEdge);
            Vector4    bgColor      = ColorHelper.ColorToVec(ColorHelper.ROIBackground);
            float      outlineWidth = 1.0f;
            RectangleF rect         = new RectangleF(PointF.Empty, new SizeF(size));

            CountLayerHelper.DrawROI(rect, roiSphere.center, roiSphere.radius, roiRect, roiMaskTexName, outlineColor, outlineWidth, bgColor, modelViewMatrix, projectionMatrix);

            // Regions
            CountLayerHelper.DrawRegions(regions, modelViewMatrix, projectionMatrix);

            // Draw tags
            {
                float tagSize = 16;
                CountLayerHelper.drawTags(tagArray, null, true, modelViewMatrix, projectionMatrix, tagSize);
            }

            // allocate array and read pixels into it.
            int myDataLength = size.Width * size.Height * 4;

            byte[] buffer = new byte[myDataLength];
            GL.ReadPixels(0, 0, size.Width, size.Height, PixelFormat.Rgba, PixelType.UnsignedByte, buffer);

            // Call save image event
            SaveCountResult(buffer, size, tags.Count, regions.Count);

            buffer = null;

            GL.DeleteTextures(1, ref outputTexName);

            // unbind framebuffer
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, fboOld);
            GL.Viewport(oldViewPort[0], oldViewPort[1], oldViewPort[2], oldViewPort[3]);
        }