Esempio n. 1
0
		internal Present Render(MapRectangle mapRect, System.Drawing.Size size, bool useDocumentTransparency, bool exactColors)
		{
			Monitor.Enter(this);
			Present result;
			try
			{
				RectangleD rectangleD = new RectangleD(mapRect.lon0 * (double)this.boundingBox.Width - 0.5, -mapRect.lat1 * (double)this.boundingBox.Height + (double)this.actualBoundingBox.Height - 0.5, (mapRect.lon1 - mapRect.lon0) * (double)this.boundingBox.Width + (double)this.hackRectangleAdjust, (mapRect.lat1 - mapRect.lat0) * (double)this.boundingBox.Height + (double)this.hackRectangleAdjust);
				RectangleD rectangleD2 = rectangleD.Grow(2.0);
				RectangleD r = new RectangleD((double)this.actualBoundingBox.X, (double)this.actualBoundingBox.Y, (double)this.actualBoundingBox.Width, (double)this.actualBoundingBox.Height);
				RectangleD dest = new RectangleD(0.0, 0.0, (double)size.Width, (double)size.Height);
				ScaleAndTranslate scaleAndTranslate = new ScaleAndTranslate(rectangleD, dest);
				RectangleD rectangleD3 = rectangleD2.Intersect(r).Round();
				RectangleD rectangleD4 = scaleAndTranslate.Apply(rectangleD.Intersect(r));
				RectangleD rectangleD5 = scaleAndTranslate.Apply(rectangleD3);
				ScaleAndTranslate scaleAndTranslate2 = new ScaleAndTranslate(-rectangleD5.X, -rectangleD5.Y);
				RectangleD rectangleD6 = scaleAndTranslate2.Apply(rectangleD4);
				GDIBigLockedImage gDIBigLockedImage = new GDIBigLockedImage(size, "WPFVerb");
				GDIBigLockedImage image = gDIBigLockedImage;
				if (!rectangleD3.IntIsEmpty() && !rectangleD6.IntIsEmpty())
				{
					try
					{
						GDIBigLockedImage obj;
						Monitor.Enter(obj = gDIBigLockedImage);
						try
						{
							Bitmap bitmap = (Bitmap)gDIBigLockedImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
							BitmapSource source = new CroppedBitmap(this.primarySource, rectangleD3.ToInt32Rect());
							BitmapSource source2 = new TransformedBitmap(source, scaleAndTranslate.ToScaleTransform());
							BitmapSource bitmapSource = new CroppedBitmap(source2, rectangleD6.ToInt32Rect());
							Int32Rect int32Rect = rectangleD4.ToInt32Rect();
							BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, size.Width, size.Height), ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
							try
							{
								IntPtr buffer = new IntPtr(bitmapData.Scan0.ToInt32() + int32Rect.Y * bitmapData.Stride + int32Rect.X * 4);
								bitmapSource.CopyPixels(new Int32Rect(0, 0, bitmapSource.PixelWidth, bitmapSource.PixelHeight), buffer, bitmapData.Stride * bitmapData.Height, bitmapData.Stride);
							}
							finally
							{
								bitmap.UnlockBits(bitmapData);
							}
						}
						finally
						{
							Monitor.Exit(obj);
						}
					}
					catch (Exception ex)
					{
						if (BigDebugKnob.theKnob.debugFeaturesEnabled)
						{
							this.LabelThisImage(gDIBigLockedImage, ex.ToString());
						}
					}
					if (useDocumentTransparency)
					{
						image = gDIBigLockedImage;
					}
					else
					{
						GDIBigLockedImage gDIBigLockedImage2 = new GDIBigLockedImage(size, "WPFVerb-untransparent");
						GDIBigLockedImage obj2;
						Monitor.Enter(obj2 = gDIBigLockedImage2);
						try
						{
							Graphics graphics = gDIBigLockedImage2.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheGraphics();
							graphics.FillRectangle(new SolidBrush(System.Drawing.Color.White), 0, 0, size.Width, size.Height);
							graphics.DrawImage(gDIBigLockedImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage(), 0, 0);
							graphics.Dispose();
							image = gDIBigLockedImage2;
							gDIBigLockedImage.Dispose();
						}
						finally
						{
							Monitor.Exit(obj2);
						}
					}
				}
				result = new ImageRef(new ImageRefCounted(image));
			}
			finally
			{
				Monitor.Exit(this);
			}
			return result;
		}
Esempio n. 2
0
        internal Present Render(MapRectangle mapRect, System.Drawing.Size size, bool useDocumentTransparency,
                                bool exactColors)
        {
            Monitor.Enter(this);
            Present result;

            try
            {
                RectangleD rectangleD = new RectangleD(mapRect.lon0 * boundingBox.Width - 0.5,
                                                       -mapRect.lat1 * boundingBox.Height + actualBoundingBox.Height - 0.5,
                                                       (mapRect.lon1 - mapRect.lon0) * boundingBox.Width + hackRectangleAdjust,
                                                       (mapRect.lat1 - mapRect.lat0) * boundingBox.Height + hackRectangleAdjust);
                RectangleD rectangleD2 = rectangleD.Grow(2.0);
                RectangleD r           = new RectangleD(actualBoundingBox.X,
                                                        actualBoundingBox.Y,
                                                        actualBoundingBox.Width,
                                                        actualBoundingBox.Height);
                RectangleD        dest = new RectangleD(0.0, 0.0, size.Width, size.Height);
                ScaleAndTranslate scaleAndTranslate  = new ScaleAndTranslate(rectangleD, dest);
                RectangleD        rectangleD3        = rectangleD2.Intersect(r).Round();
                RectangleD        rectangleD4        = scaleAndTranslate.Apply(rectangleD.Intersect(r));
                RectangleD        rectangleD5        = scaleAndTranslate.Apply(rectangleD3);
                ScaleAndTranslate scaleAndTranslate2 = new ScaleAndTranslate(-rectangleD5.X, -rectangleD5.Y);
                RectangleD        rectangleD6        = scaleAndTranslate2.Apply(rectangleD4);
                GDIBigLockedImage gDIBigLockedImage  = new GDIBigLockedImage(size, "WPFVerb");
                GDIBigLockedImage image = gDIBigLockedImage;
                if (!rectangleD3.IntIsEmpty() && !rectangleD6.IntIsEmpty())
                {
                    try
                    {
                        GDIBigLockedImage obj;
                        Monitor.Enter(obj = gDIBigLockedImage);
                        try
                        {
                            Bitmap bitmap =
                                (Bitmap)gDIBigLockedImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage();
                            BitmapSource source       = new CroppedBitmap(primarySource, rectangleD3.ToInt32Rect());
                            BitmapSource source2      = new TransformedBitmap(source, scaleAndTranslate.ToScaleTransform());
                            BitmapSource bitmapSource = new CroppedBitmap(source2, rectangleD6.ToInt32Rect());
                            Int32Rect    int32Rect    = rectangleD4.ToInt32Rect();
                            BitmapData   bitmapData   = bitmap.LockBits(new Rectangle(0, 0, size.Width, size.Height),
                                                                        ImageLockMode.WriteOnly,
                                                                        System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                            try
                            {
                                IntPtr buffer = new IntPtr(bitmapData.Scan0.ToInt32() +
                                                           int32Rect.Y * bitmapData.Stride + int32Rect.X * 4);
                                bitmapSource.CopyPixels(
                                    new Int32Rect(0, 0, bitmapSource.PixelWidth, bitmapSource.PixelHeight),
                                    buffer,
                                    bitmapData.Stride * bitmapData.Height,
                                    bitmapData.Stride);
                            }
                            finally
                            {
                                bitmap.UnlockBits(bitmapData);
                            }
                        }
                        finally
                        {
                            Monitor.Exit(obj);
                        }
                    }
                    catch (Exception ex)
                    {
                        if (BigDebugKnob.theKnob.debugFeaturesEnabled)
                        {
                            LabelThisImage(gDIBigLockedImage, ex.ToString());
                        }
                    }

                    if (useDocumentTransparency)
                    {
                        image = gDIBigLockedImage;
                    }
                    else
                    {
                        GDIBigLockedImage gDIBigLockedImage2 = new GDIBigLockedImage(size, "WPFVerb-untransparent");
                        GDIBigLockedImage obj2;
                        Monitor.Enter(obj2 = gDIBigLockedImage2);
                        try
                        {
                            Graphics graphics =
                                gDIBigLockedImage2.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheGraphics();
                            graphics.FillRectangle(new SolidBrush(System.Drawing.Color.White),
                                                   0,
                                                   0,
                                                   size.Width,
                                                   size.Height);
                            graphics.DrawImage(gDIBigLockedImage.IPromiseIAmHoldingGDISLockSoPleaseGiveMeTheImage(),
                                               0,
                                               0);
                            graphics.Dispose();
                            image = gDIBigLockedImage2;
                            gDIBigLockedImage.Dispose();
                        }
                        finally
                        {
                            Monitor.Exit(obj2);
                        }
                    }
                }

                result = new ImageRef(new ImageRefCounted(image));
            }
            finally
            {
                Monitor.Exit(this);
            }

            return(result);
        }