Draw() private méthode

private Draw ( Rectangle &cropRectangle, BackgroundWorker worker ) : Bitmap
cropRectangle System.Drawing.Rectangle
worker System.ComponentModel.BackgroundWorker
Résultat System.Drawing.Bitmap
Exemple #1
0
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                Console.WriteLine("Usage: fCraftImg.exe <map filename> <output png> [rotation (0-3)] [mode] [x y z x2 y2 z2]");
                return;
            }

            int    i        = 0;
            string filename = args[i++];
            string output   = args[i++];
            int    rotation = 0;

            if (args.Length >= i + 1)
            {
                rotation = System.Convert.ToInt32(args[i++]);
            }
            int mode = 0;

            if (args.Length >= i + 1)
            {
                mode = System.Convert.ToInt32(args[i++]);
            }

            int[] chunkCoords = new int[6];
            for (int pos = 0; pos < 6; pos++)
            {
                if (args.Length < i + 1)
                {
                    break;
                }
                chunkCoords[pos] = System.Convert.ToInt32(args[i++]);
            }

            try {
                Map map = fCraft.MapConversion.MapUtility.Load(filename);
                map.CalculateShadows();
                fCraft.GUI.IsoCat renderer = new fCraft.GUI.IsoCat(map, (fCraft.GUI.IsoCatMode)mode, rotation);
                renderer.ChunkCoords = chunkCoords;

                Rectangle        cropRectangle;
                BackgroundWorker bwRenderer = new BackgroundWorker();
                bwRenderer.WorkerReportsProgress = true;
                Bitmap rawImage = renderer.Draw(out cropRectangle, bwRenderer);

                Bitmap outputImage = rawImage.Clone(cropRectangle, rawImage.PixelFormat);
                outputImage.Save(output, System.Drawing.Imaging.ImageFormat.Png);
            } catch (Exception ex) {
                Console.WriteLine("An Error Occured!");
                Console.Write(ex);
            }
        }
Exemple #2
0
        void RenderLoop() {
            renderer = MakeRenderer();
            using( MemoryStream ms = new MemoryStream() ) {
                // loop terminates with the rest of the program (this is a background thread)
                while( true ) {
                    // wait (block) until a map is available for drawing
                    RenderTask task = inQueue.WaitDequeue();
                    try {
                        // render the map
                        IsoCatResult result = renderer.Draw( task.Map );
                        task.Map = null;

                        // crop image (if needed)
                        Image image;
                        if( p.Uncropped ) {
                            image = result.Bitmap;
                        } else {
                            image = result.Bitmap.Clone( result.CropRectangle, result.Bitmap.PixelFormat );
                            result.Bitmap.Dispose();
                        }

                        // encode image
                        if( p.ExportFormat.Equals( ImageFormat.Jpeg ) ) {
                            EncoderParameters encoderParams = new EncoderParameters();
                            encoderParams.Param[0] = new EncoderParameter( Encoder.Quality, p.JpegQuality );
                            image.Save( ms, p.ImageEncoder, encoderParams );
                        } else if( p.ExportFormat.Equals( ImageFormat.Gif ) ) {
                            OctreeQuantizer q = new OctreeQuantizer( 255, 8 );
                            image = q.Quantize( image );
                            image.Save( ms, p.ExportFormat );
                        } else {
                            image.Save( ms, p.ExportFormat );
                        }
                        image.Dispose();

                        // store result as a byte[]
                        task.Result = ms.ToArray();

                    } catch( Exception ex ) {
                        task.Exception = ex;
                    }

                    // send stack to the results queue
                    outQueue.Enqueue( task );
                    ms.SetLength( 0 );
                }
            }
        }
Exemple #3
0
 void AsyncDraw( object sender, DoWorkEventArgs e ) {
     stopwatch = Stopwatch.StartNew();
     renderer = new IsoCat( Map, IsoCatMode.Normal, previewRotation );
     Rectangle cropRectangle;
     if( bwRenderer.CancellationPending ) return;
     Bitmap rawImage = renderer.Draw( out cropRectangle, bwRenderer );
     if( bwRenderer.CancellationPending ) return;
     if( rawImage != null ) {
         previewImage = rawImage.Clone( cropRectangle, rawImage.PixelFormat );
     }
     renderer = null;
     GC.Collect( GC.MaxGeneration, GCCollectionMode.Optimized );
 }