Beispiel #1
0
        public GDIBigLockedImage Render(Size outSize, Point topleft, Size pagesize, bool transparentBackground)
        {
            int    alpha = transparentBackground ? 0 : 255;
            object foxitMutex;

            Monitor.Enter(foxitMutex = FoxitViewer.FoxitMutex);
            GDIBigLockedImage result;

            try
            {
                int bitmap = this.foxitLib.Bitmap_Create(outSize.Width, outSize.Height, 1);
                this.foxitLib.Bitmap_FillRect(bitmap, 0, 0, outSize.Width, outSize.Height, 255, 255, 255, alpha);
                this.foxitLib.RenderPageBitmap(bitmap, this.pageHandle, topleft.X, topleft.Y, pagesize.Width, pagesize.Height, 0, 0);
                IntPtr scan    = this.foxitLib.Bitmap_GetBuffer(bitmap);
                Bitmap bitmap2 = new Bitmap(outSize.Width, outSize.Height, outSize.Width * 4, PixelFormat.Format32bppArgb, scan);
                this.foxitLib.Bitmap_Destroy(bitmap);
                GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(bitmap2);
                result = gDIBigLockedImage;
            }
            finally
            {
                Monitor.Exit(foxitMutex);
            }
            return(result);
        }
Beispiel #2
0
 public void DrawImageOntoThis(GDIBigLockedImage gDISImage, RectangleF destRect, RectangleF srcRect)
 {
     Monitor.Enter(this);
     try
     {
         Graphics gDIGraphics = this.GetGDIGraphics();
         Monitor.Enter(gDISImage);
         try
         {
             gDIGraphics.DrawImage(gDISImage.gdiImage, destRect, srcRect, GraphicsUnit.Pixel);
         }
         finally
         {
             Monitor.Exit(gDISImage);
         }
         this.gdiGraphics.Dispose();
         this.gdiGraphics = null;
         FIBR.Announce("GDIBigLockedImage.DrawImageOntoThis", new object[]
         {
             MakeObjectID.Maker.make(this),
             MakeObjectID.Maker.make(gDISImage),
             destRect,
             srcRect
         });
     }
     finally
     {
         Monitor.Exit(this);
     }
 }
Beispiel #3
0
 private void SaveTile(GDIBigLockedImage compositeImage)
 {
     try
     {
         ImageRef imageRef = new ImageRef(new ImageRefCounted(compositeImage));
         GDIBigLockedImage.Transparentness transparentness = imageRef.image.GetTransparentness();
         if (transparentness == GDIBigLockedImage.Transparentness.EntirelyTransparent)
         {
             D.Sayf(0, "skipping blank tile.", new object[0]);
         }
         else
         {
             if (this.outputTileType == OutputTileType.IPIC)
             {
                 if (transparentness == GDIBigLockedImage.Transparentness.EntirelyOpaque)
                 {
                     this.outputTileType = OutputTileType.JPG;
                 }
                 else
                 {
                     this.outputTileType = OutputTileType.PNG;
                 }
             }
             RenderOutputUtil.SaveImage(imageRef, this.renderOutput, this.outputFilename, this.outputTileType.imageFormat);
         }
         this.feedback.PostImageResult(imageRef, this.layer, "(composite)", this.address);
         imageRef.Dispose();
     }
     catch (Exception arg)
     {
         this.feedback.PostMessage(string.Format("Can't create {0}: {1}", this.outputFilename, arg));
     }
 }
Beispiel #4
0
        public static GDIBigLockedImage FromStream(Stream instream)
        {
            GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage("FromStream");

            gDIBigLockedImage.gdiImage = Image.FromStream(instream);
            FIBR.Announce("GDIBigLockedImage.FromStream", new object[] { MakeObjectID.Maker.make(gDIBigLockedImage) });
            return(gDIBigLockedImage);
        }
Beispiel #5
0
        public static GDIBigLockedImage FromFile(string filename)
        {
            GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage("FromFile");

            gDIBigLockedImage.gdiImage = Image.FromFile(filename);
            FIBR.Announce("GDIBigLockedImage.FromFile",
                          new object[] { MakeObjectID.Maker.make(gDIBigLockedImage), filename });
            return(gDIBigLockedImage);
        }
Beispiel #6
0
        public ImageRef MessageImage(string message, Size tileSize)
        {
            GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(tileSize, "ViewerControl-MessageImage");
            Graphics          graphics          = gDIBigLockedImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheGraphics();
            Brush             brush             = new SolidBrush(Color.LightGray);

            graphics.FillRectangle(brush, 0, 0, tileSize.Width, tileSize.Height);
            graphics.DrawString(message, new Font("Arial", 10f), new SolidBrush(Color.Crimson), new PointF((float)tileSize.Width * 0.02f, (float)tileSize.Height * 0.2f));
            graphics.DrawString(message, new Font("Arial", 10f), new SolidBrush(Color.Crimson), new PointF((float)tileSize.Width * 0.02f, (float)tileSize.Height * 0.8f));
            return(new ImageRef(new ImageRefCounted(gDIBigLockedImage)));
        }
Beispiel #7
0
        public override bool DoWork(ITileWorkFeedback feedback)
        {
            this.feedback = feedback;
            bool result;

            try
            {
                D.Sayf(0, "{0} start compositing {1}", new object[]
                {
                    Clocker.theClock.stamp(),
                    this
                });
                if (!this.NeedThisTile())
                {
                    D.Say(10, "Skipping extant file: " + this.outputFilename);
                    result = false;
                }
                else
                {
                    D.Sayf(10, "Compositing {0}", new object[]
                    {
                        this.address
                    });
                    Size tileSize = new MercatorCoordinateSystem().GetTileSize();
                    GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(tileSize, "CompositeTileUnit");
                    D.Say(10, string.Format("Start({0}) sm.count={1}", this.address, this.singleSourceUnits.Count));
                    foreach (SingleSourceUnit current in this.singleSourceUnits)
                    {
                        current.CompositeImageInto(gDIBigLockedImage);
                    }
                    this.SaveTile(gDIBigLockedImage);
                    result = true;
                }
            }
            catch (NonredundantRenderComplaint complaint)
            {
                feedback.PostComplaint(complaint);
                result = false;
            }
            catch (Exception arg)
            {
                feedback.PostMessage(string.Format("Exception compositing tile {0}: {1}", this.address, arg));
                result = false;
            }
            return(result);
        }
		public void CompositeImageInto(GDIBigLockedImage baseImage)
		{
			Present present = this.FetchClippedImage();
			if (present is ImageRef)
			{
				ImageRef imageRef = (ImageRef)present;
				baseImage.DrawImageOntoThis(imageRef.image, new Rectangle(0, 0, baseImage.Width, baseImage.Height), new Rectangle(0, 0, imageRef.image.Width, imageRef.image.Height));
			}
			else
			{
				if (present is PresentFailureCode)
				{
					throw new NonredundantRenderComplaint(string.Format("{0}: {1}", this.applier.DescribeSourceForComplaint(), ((PresentFailureCode)present).exception.Message));
				}
			}
			present.Dispose();
		}
		public override bool DoWork(ITileWorkFeedback feedback)
		{
			this.feedback = feedback;
			bool result;
			try
			{
				D.Sayf(0, "{0} start compositing {1}", new object[]
				{
					Clocker.theClock.stamp(),
					this
				});
				if (!this.NeedThisTile())
				{
					D.Say(10, "Skipping extant file: " + this.outputFilename);
					result = false;
				}
				else
				{
					D.Sayf(10, "Compositing {0}", new object[]
					{
						this.address
					});
					Size tileSize = new MercatorCoordinateSystem().GetTileSize();
					GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(tileSize, "CompositeTileUnit");
					D.Say(10, string.Format("Start({0}) sm.count={1}", this.address, this.singleSourceUnits.Count));
					foreach (SingleSourceUnit current in this.singleSourceUnits)
					{
						current.CompositeImageInto(gDIBigLockedImage);
					}
					this.SaveTile(gDIBigLockedImage);
					result = true;
				}
			}
			catch (NonredundantRenderComplaint complaint)
			{
				feedback.PostComplaint(complaint);
				result = false;
			}
			catch (Exception arg)
			{
				feedback.PostMessage(string.Format("Exception compositing tile {0}: {1}", this.address, arg));
				result = false;
			}
			return result;
		}
Beispiel #10
0
        public void CompositeImageInto(GDIBigLockedImage baseImage)
        {
            Present present = this.FetchClippedImage();

            if (present is ImageRef)
            {
                ImageRef imageRef = (ImageRef)present;
                baseImage.DrawImageOntoThis(imageRef.image, new Rectangle(0, 0, baseImage.Width, baseImage.Height), new Rectangle(0, 0, imageRef.image.Width, imageRef.image.Height));
            }
            else
            {
                if (present is PresentFailureCode)
                {
                    throw new NonredundantRenderComplaint(string.Format("{0}: {1}", this.applier.DescribeSourceForComplaint(), ((PresentFailureCode)present).exception.Message));
                }
            }
            present.Dispose();
        }
		private void SaveTile(GDIBigLockedImage compositeImage)
		{
			try
			{
				ImageRef imageRef = new ImageRef(new ImageRefCounted(compositeImage));
				GDIBigLockedImage.Transparentness transparentness = imageRef.image.GetTransparentness();
				if (transparentness == GDIBigLockedImage.Transparentness.EntirelyTransparent)
				{
					D.Sayf(0, "skipping blank tile.", new object[0]);
				}
				else
				{
					if (this.outputTileType == OutputTileType.IPIC)
					{
						if (transparentness == GDIBigLockedImage.Transparentness.EntirelyOpaque)
						{
							this.outputTileType = OutputTileType.JPG;
						}
						else
						{
							this.outputTileType = OutputTileType.PNG;
						}
					}
					RenderOutputUtil.SaveImage(imageRef, this.renderOutput, this.outputFilename, this.outputTileType.imageFormat);
				}
				this.feedback.PostImageResult(imageRef, this.layer, "(composite)", this.address);
				imageRef.Dispose();
			}
			catch (Exception arg)
			{
				this.feedback.PostMessage(string.Format("Can't create {0}: {1}", this.outputFilename, arg));
			}
		}
Beispiel #12
0
		public void DrawImageOntoThis(GDIBigLockedImage gDISImage, RectangleF destRect, RectangleF srcRect)
		{
			Monitor.Enter(this);
			try
			{
				Graphics gDIGraphics = this.GetGDIGraphics();
				Monitor.Enter(gDISImage);
				try
				{
					gDIGraphics.DrawImage(gDISImage.gdiImage, destRect, srcRect, GraphicsUnit.Pixel);
				}
				finally
				{
					Monitor.Exit(gDISImage);
				}
				this.gdiGraphics.Dispose();
				this.gdiGraphics = null;
				FIBR.Announce("GDIBigLockedImage.DrawImageOntoThis", new object[]
				{
					MakeObjectID.Maker.make(this),
					MakeObjectID.Maker.make(gDISImage),
					destRect,
					srcRect
				});
			}
			finally
			{
				Monitor.Exit(this);
			}
		}
Beispiel #13
0
		public static GDIBigLockedImage FromFile(string filename)
		{
			GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage("FromFile");
			gDIBigLockedImage.gdiImage = Image.FromFile(filename);
			FIBR.Announce("GDIBigLockedImage.FromFile", new object[]
			{
				MakeObjectID.Maker.make(gDIBigLockedImage),
				filename
			});
			return gDIBigLockedImage;
		}
Beispiel #14
0
		public static GDIBigLockedImage FromStream(Stream instream)
		{
			GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage("FromStream");
			gDIBigLockedImage.gdiImage = Image.FromStream(instream);
			FIBR.Announce("GDIBigLockedImage.FromStream", new object[]
			{
				MakeObjectID.Maker.make(gDIBigLockedImage)
			});
			return gDIBigLockedImage;
		}
		public unsafe static void doWarp(GDIBigLockedImage destImage, GDIBigLockedImage sourceImage, IPointTransformer[] pointTransformers, InterpolationMode mode)
		{
            Bitmap bitmap;
            BitmapData data;
            Bitmap bitmap2;
            BitmapData data2;
            DateTime now = DateTime.Now;
            PointD td = new PointD();
            PointD td2 = new PointD();
            lock (destImage)
            {
                bitmap = (Bitmap)destImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
            }
            lock (sourceImage)
            {
                bitmap2 = (Bitmap)sourceImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                data2 = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            }
            PixelStruct* structPtr = (PixelStruct*)data.Scan0;
            int width = data.Width;
            int height = data.Height;
            int num9 = data.Stride / sizeof(PixelStruct);
            PixelStruct* structPtr3 = (PixelStruct*)data2.Scan0;
            int num10 = data2.Width;
            int num11 = data2.Height;
            int num12 = data2.Stride / sizeof(PixelStruct);
            int num15 = num11 - 1;
            for (int i = 0; i < height; i++)
            {
                int num13 = 0;
                for (PixelStruct* structPtr2 = structPtr + (((height - 1) - i) * num9); num13 < width; structPtr2++)
                {
                    int x;
                    int num2;
                    PixelStruct* structPtr4;
                    td.x = num13;
                    td.y = i;
                    for (int j = 0; j < pointTransformers.Length; j++)
                    {
                        pointTransformers[j].doTransform(td, td2);
                        td.x = td2.x;
                        td.y = td2.y;
                    }
                    if (mode == InterpolationMode.NearestNeighbor)
                    {
                        x = (int)td.x;
                        num2 = num15 - ((int)td.y);
                        if (((x >= 0) && (x < num10)) && ((num2 >= 0) && (num2 < num11)))
                        {
                            structPtr4 = (structPtr3 + (num2 * num12)) + x;
                            structPtr2[0] = structPtr4[0];
                        }
                    }
                    else
                    {
                        if (mode != InterpolationMode.Bilinear)
                        {
                            throw new Exception("Unimplemented mode");
                        }
                        double num17 = num15 - td.y;
                        int num3 = (int)td.x;
                        int num4 = (int)num17;
                        double num5 = td.x - num3;
                        double num6 = num17 - num4;
                        IntPixel pixel = IntPixel.BlackPixel();
                        int num20 = 0;
                        for (double k = 1.0 - num5; num20 <= 1; k = num5)
                        {
                            int num21 = 0;
                            for (double m = 1.0 - num6; num21 <= 1; m = num6)
                            {
                                x = num3 + num20;
                                num2 = num4 + num21;
                                if (((x >= 0) && (x < num10)) && ((num2 >= 0) && (num2 < num11)))
                                {
                                    structPtr4 = (structPtr3 + (num2 * num12)) + x;
                                    pixel.addWeighted(k * m, structPtr4[0]);
                                }
                                num21++;
                            }
                            num20++;
                        }
                        structPtr2[0] = pixel.AsPixel();
                    }
                    num13++;
                }
            }
            lock (destImage)
            {
                bitmap.UnlockBits(data);
            }
            lock (sourceImage)
            {
                bitmap2.UnlockBits(data2);
            }
		}
Beispiel #16
0
        public static unsafe void doWarp(GDIBigLockedImage destImage, GDIBigLockedImage sourceImage,
                                         IPointTransformer[] pointTransformers, InterpolationMode mode)
        {
            Bitmap     bitmap;
            BitmapData data;
            Bitmap     bitmap2;
            BitmapData data2;
            DateTime   now = DateTime.Now;
            PointD     td  = new PointD();
            PointD     td2 = new PointD();

            lock (destImage)
            {
                bitmap = (Bitmap)destImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                data   = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                         ImageLockMode.WriteOnly,
                                         PixelFormat.Format32bppArgb);
            }

            lock (sourceImage)
            {
                bitmap2 = (Bitmap)sourceImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                data2   = bitmap2.LockBits(new Rectangle(0, 0, bitmap2.Width, bitmap2.Height),
                                           ImageLockMode.ReadOnly,
                                           PixelFormat.Format32bppArgb);
            }

            PixelStruct *structPtr  = (PixelStruct *)data.Scan0;
            int          width      = data.Width;
            int          height     = data.Height;
            int          num9       = data.Stride / sizeof(PixelStruct);
            PixelStruct *structPtr3 = (PixelStruct *)data2.Scan0;
            int          num10      = data2.Width;
            int          num11      = data2.Height;
            int          num12      = data2.Stride / sizeof(PixelStruct);
            int          num15      = num11 - 1;

            for (int i = 0; i < height; i++)
            {
                int num13 = 0;
                for (PixelStruct *structPtr2 = structPtr + (height - 1 - i) * num9; num13 < width; structPtr2++)
                {
                    int          x;
                    int          num2;
                    PixelStruct *structPtr4;
                    td.x = num13;
                    td.y = i;
                    for (int j = 0; j < pointTransformers.Length; j++)
                    {
                        pointTransformers[j].doTransform(td, td2);
                        td.x = td2.x;
                        td.y = td2.y;
                    }

                    if (mode == InterpolationMode.NearestNeighbor)
                    {
                        x    = (int)td.x;
                        num2 = num15 - (int)td.y;
                        if (x >= 0 && x < num10 && num2 >= 0 && num2 < num11)
                        {
                            structPtr4    = structPtr3 + num2 * num12 + x;
                            structPtr2[0] = structPtr4[0];
                        }
                    }
                    else
                    {
                        if (mode != InterpolationMode.Bilinear)
                        {
                            throw new Exception("Unimplemented mode");
                        }

                        double   num17 = num15 - td.y;
                        int      num3  = (int)td.x;
                        int      num4  = (int)num17;
                        double   num5  = td.x - num3;
                        double   num6  = num17 - num4;
                        IntPixel pixel = IntPixel.BlackPixel();
                        int      num20 = 0;
                        for (double k = 1.0 - num5; num20 <= 1; k = num5)
                        {
                            int num21 = 0;
                            for (double m = 1.0 - num6; num21 <= 1; m = num6)
                            {
                                x    = num3 + num20;
                                num2 = num4 + num21;
                                if (x >= 0 && x < num10 && num2 >= 0 && num2 < num11)
                                {
                                    structPtr4 = structPtr3 + num2 * num12 + x;
                                    pixel.addWeighted(k * m, structPtr4[0]);
                                }

                                num21++;
                            }

                            num20++;
                        }

                        structPtr2[0] = pixel.AsPixel();
                    }

                    num13++;
                }
            }

            lock (destImage)
            {
                bitmap.UnlockBits(data);
            }

            lock (sourceImage)
            {
                bitmap2.UnlockBits(data2);
            }
        }
Beispiel #17
0
		public GDIBigLockedImage Render(Size outSize, Point topleft, Size pagesize, bool transparentBackground)
		{
			int alpha = transparentBackground ? 0 : 255;
			object foxitMutex;
			Monitor.Enter(foxitMutex = FoxitViewer.FoxitMutex);
			GDIBigLockedImage result;
			try
			{
				int bitmap = this.foxitLib.Bitmap_Create(outSize.Width, outSize.Height, 1);
				this.foxitLib.Bitmap_FillRect(bitmap, 0, 0, outSize.Width, outSize.Height, 255, 255, 255, alpha);
				this.foxitLib.RenderPageBitmap(bitmap, this.pageHandle, topleft.X, topleft.Y, pagesize.Width, pagesize.Height, 0, 0);
				IntPtr scan = this.foxitLib.Bitmap_GetBuffer(bitmap);
				Bitmap bitmap2 = new Bitmap(outSize.Width, outSize.Height, outSize.Width * 4, PixelFormat.Format32bppArgb, scan);
				this.foxitLib.Bitmap_Destroy(bitmap);
				GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(bitmap2);
				result = gDIBigLockedImage;
			}
			finally
			{
				Monitor.Exit(foxitMutex);
			}
			return result;
		}
Beispiel #18
0
 public ImageRef MessageImage(string message, Size tileSize)
 {
     GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(tileSize, "ViewerControl-MessageImage");
     Graphics graphics = gDIBigLockedImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheGraphics();
     Brush brush = new SolidBrush(Color.LightGray);
     graphics.FillRectangle(brush, 0, 0, tileSize.Width, tileSize.Height);
     graphics.DrawString(message, new Font("Arial", 10f), new SolidBrush(Color.Crimson), new PointF((float)tileSize.Width * 0.02f, (float)tileSize.Height * 0.2f));
     graphics.DrawString(message, new Font("Arial", 10f), new SolidBrush(Color.Crimson), new PointF((float)tileSize.Width * 0.02f, (float)tileSize.Height * 0.8f));
     return new ImageRef(new ImageRefCounted(gDIBigLockedImage));
 }