// ************************************************************************** // 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); }
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]); }