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); }
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); } }
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)); } }
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 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); }
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))); }
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; }
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; }
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); } }
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); } }
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; }
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)); }