Exemplo n.º 1
0
        public Bitmap Render(IImageRaster <IRaster3DInteger, bool> source_image)
        {
            IRaster3DInteger source_raster = source_image.Raster;
            List <int>       elements_true = source_image.GetElementIndexesWithValue(true);

            float[,] coordinates_image   = new float[elements_true.Count, 3];
            float[,] elements_projection = new float[elements_true.Count, 3];
            int [] coordinates = new int [3];

            for (int element_index_index = 0; element_index_index < elements_true.Count; element_index_index++)
            {
                source_raster.GetElementCoordinatesRBA(elements_true[element_index_index], coordinates);
                coordinates_image[element_index_index, 0] = coordinates[0];
                coordinates_image[element_index_index, 1] = coordinates[1];
                coordinates_image[element_index_index, 2] = coordinates[2];
            }

            for (int element_index = 0; element_index < elements_true.Count; element_index++)
            {
                elements_projection[element_index, 0] = ((coordinates_image[element_index, 0] - image_focus[0]) * projection_vector_x[0]) +
                                                        ((coordinates_image[element_index, 1] - image_focus[1]) * projection_vector_x[1]) +
                                                        ((coordinates_image[element_index, 2] - image_focus[2]) * projection_vector_x[2]);

                elements_projection[element_index, 1] = ((coordinates_image[element_index, 0] - image_focus[0]) * projection_vector_y[0]) +
                                                        ((coordinates_image[element_index, 1] - image_focus[1]) * projection_vector_y[1]) +
                                                        ((coordinates_image[element_index, 2] - image_focus[2]) * projection_vector_y[2]);

                elements_projection[element_index, 2] = ((coordinates_image[element_index, 0] - image_focus[0]) * projection_vector_z[0]) +
                                                        ((coordinates_image[element_index, 1] - image_focus[1]) * projection_vector_z[1]) +
                                                        ((coordinates_image[element_index, 2] - image_focus[2]) * projection_vector_z[2]);
            }

            Raster2DInteger bitmap_raster     = new Raster2DInteger(bitmap_size_x, bitmap_size_y);
            Bitmap          destination_image = new Bitmap(bitmap_size_x, bitmap_size_y);

            for (int index_y = 0; index_y < bitmap_raster.Size1; index_y++)
            {
                for (int index_x = 0; index_x < bitmap_raster.Size0; index_x++)
                {
                    destination_image.SetPixel(index_x, index_y, Color.Black);
                }
            }

            for (int element_index = 0; element_index < elements_true.Count; element_index++)
            {
                int x_target = (int)elements_projection[element_index, 0] + (bitmap_raster.Size0 / 2);
                int y_target = (int)elements_projection[element_index, 1] + (bitmap_raster.Size1 / 2);

                if (bitmap_raster.ContainsCoordinates(x_target, y_target))
                {
                    destination_image.SetPixel(x_target, y_target, Color.White);
                }
            }
            return(destination_image);
        }
        public IImageRaster <IRaster2DInteger, bool> Render(Tuple <List <int>, IRaster3DInteger> render_source)
        {
            List <int>       elements_true = render_source.Item1;
            IRaster3DInteger source_raster = render_source.Item2;

            float[,] coordinates_image   = new float[elements_true.Count, 3];
            float[,] elements_projection = new float[elements_true.Count, 3];
            int [] coordinates = new int [3];

            for (int element_index_index = 0; element_index_index < elements_true.Count; element_index_index++)
            {
                source_raster.GetElementCoordinatesRBA(elements_true[element_index_index], coordinates);
                coordinates_image[element_index_index, 0] = coordinates[0];
                coordinates_image[element_index_index, 1] = coordinates[1];
                coordinates_image[element_index_index, 2] = coordinates[2];
            }

            for (int element_index = 0; element_index < elements_true.Count; element_index++)
            {
                elements_projection[element_index, 0] = ((coordinates_image[element_index, 0] - image_focus[0]) * projection_vector_x[0]) +
                                                        ((coordinates_image[element_index, 1] - image_focus[1]) * projection_vector_x[1]) +
                                                        ((coordinates_image[element_index, 2] - image_focus[2]) * projection_vector_x[2]);

                elements_projection[element_index, 1] = ((coordinates_image[element_index, 0] - image_focus[0]) * projection_vector_y[0]) +
                                                        ((coordinates_image[element_index, 1] - image_focus[1]) * projection_vector_y[1]) +
                                                        ((coordinates_image[element_index, 2] - image_focus[2]) * projection_vector_y[2]);

                elements_projection[element_index, 2] = ((coordinates_image[element_index, 0] - image_focus[0]) * projection_vector_z[0]) +
                                                        ((coordinates_image[element_index, 1] - image_focus[1]) * projection_vector_z[1]) +
                                                        ((coordinates_image[element_index, 2] - image_focus[2]) * projection_vector_z[2]);
            }

            Raster2DInteger      bitmap_raster     = new Raster2DInteger(bitmap_size_x, bitmap_size_y);
            ImageRaster2D <bool> destination_image = new ImageRaster2D <bool>(bitmap_size_x, bitmap_size_y);

            for (int element_index = 0; element_index < elements_true.Count; element_index++)
            {
                int x_target = (int)elements_projection[element_index, 0] + (bitmap_raster.Size0 / 2);
                int y_target = (int)elements_projection[element_index, 1] + (bitmap_raster.Size1 / 2);

                if (bitmap_raster.ContainsCoordinates(x_target, y_target))
                {
                    destination_image.SetElementValue(x_target, y_target, true);
                }
            }
            return(destination_image);
        }
Exemplo n.º 3
0
        public static IImageRaster2D <ElementType> Convert <ElementType>(String path, IFunction <Color, ElementType> color_converter)
        {
            // Open a Stream and decode a bitmap image
            Bitmap image_color   = new Bitmap(path);
            int    element_count = image_color.Width * image_color.Height;

            ElementType[]    image_array = new ElementType[element_count];
            IRaster2DInteger raster      = new Raster2DInteger(image_color.Width, image_color.Height);

            for (int index_y = 0; index_y < image_color.Height; index_y++)
            {
                for (int index_x = 0; index_x < image_color.Width; index_x++)
                {
                    image_array[raster.GetElementIndex(index_x, index_y)] = color_converter.Compute(image_color.GetPixel(index_x, index_y));
                }
            }
            return(new ImageRaster2D <ElementType>(raster, image_array, false));
        }
Exemplo n.º 4
0
        public BitmapFast Render(Tuple <double[][], Color[]> render_image)
        {
            double[][]  points           = render_image.Item1;
            Color[]     colors           = render_image.Item2;
            double [][] projected_points = new double [points.Length][];
            int[]       coordinates      = new int[3];

            for (int point_index = 0; point_index < points.Length; point_index++)
            {
                projected_points[point_index] = (projection_matrix * (points[point_index] - offset_matrix)).ToArray1DFloat64();
            }



            Raster2DInteger bitmap_raster     = new Raster2DInteger(bitmap_size_x, bitmap_size_y);
            BitmapFast      destination_image = new BitmapFast(this.bitmap_size_x, this.bitmap_size_y);

            destination_image.Lock();
            for (int index_y = 0; index_y < bitmap_raster.Size1; index_y++)
            {
                for (int index_x = 0; index_x < bitmap_raster.Size0; index_x++)
                {
                    destination_image.SetPixel(index_x, index_y, Color.Black);
                }
            }


            for (int element_index = 0; element_index < points.Length; element_index++)
            {
                int x_target = (int)(projected_points[element_index][0] * this.scale) + (bitmap_raster.Size0 / 2);
                int y_target = (int)(projected_points[element_index][1] * this.scale) + (bitmap_raster.Size1 / 2);

                if (bitmap_raster.ContainsCoordinates(x_target, y_target))
                {
                    destination_image.SetPixel(x_target, y_target, colors[element_index]);
                }
            }

            destination_image.Unlock();
            return(destination_image);
        }