/// <summary> Initialize this PixelMap from another image map. /// /// </summary> /// <param name="ref">image map to initialize from /// /// </param> /// <returns> the initialized PixelMap /// </returns> public virtual PixelMap Init(Map ref_Renamed) { Init(ref_Renamed.ImageHeight, ref_Renamed.ImageWidth, ((null))); PixelReference pixel = CreateGPixelReference(0); if ((ImageHeight > 0) && (ImageWidth > 0)) { PixelReference refPixel = (ref_Renamed).CreateGPixelReference(0); for (int y = 0; y < ImageHeight; y++) { pixel.SetOffset(y, 0); refPixel.SetOffset(y, 0); if (!IsRampNeeded) { for (int x = ImageWidth; x-- > 0; pixel.IncOffset(), refPixel.IncOffset()) { pixel.CopyFrom(refPixel); } } else { for (int x = ImageWidth; x-- > 0; pixel.IncOffset(), refPixel.IncOffset()) { pixel.CopyFrom(ref_Renamed.PixelRamp(refPixel)); } } } } return(this); }
/// <summary> Initialize this PixelMap from a segment of another image map. /// /// </summary> /// <param name="ref">image map to initialize from /// </param> /// <param name="rect">bounding rectangle to initialize from /// /// </param> /// <returns> the initialized PixelMap /// </returns> public virtual PixelMap Init(Map ref_Renamed, Rectangle rect) { Init(rect.Height, rect.Width, ((null))); Rectangle rect2 = new Rectangle(0, 0, ref_Renamed.ImageWidth, ref_Renamed.ImageHeight); rect2.Intersect(rect2, rect); rect2.Translate(-rect.Right, -rect.Bottom); if (!rect2.Empty) { PixelReference pixel = CreateGPixelReference(0); PixelReference refPixel = ref_Renamed.CreateGPixelReference(0); for (int y = rect2.Bottom; y < rect2.Top; y++) { pixel.SetOffset(y, rect2.Right); refPixel.SetOffset(y + rect.Bottom, rect.Right + rect2.Right); if (!IsRampNeeded) { for (int x = rect2.Left - rect2.Right; x-- > 0; pixel.IncOffset(), refPixel.IncOffset()) { pixel.CopyFrom(refPixel); } } else { for (int x = rect2.Left - rect2.Right; x-- > 0; pixel.IncOffset(), refPixel.IncOffset()) { pixel.CopyFrom(ref_Renamed.PixelRamp(refPixel)); } } } } return(this); }
/// <summary> Insert the reference map at the specified location. /// /// </summary> /// <param name="ref">map to insert /// </param> /// <param name="dx">horizontal position to insert at /// </param> /// <param name="dy">vertical position to insert at /// </param> public override void Fill(Map ref_Renamed, int dx, int dy) { int x0 = (dx > 0) ? dx : 0; int y0 = (dy > 0) ? dy : 0; int x1 = (dx < 0) ? (-dx) : 0; int y1 = (dy < 0) ? (-dy) : 0; int w0 = ImageWidth - x0; int w1 = ref_Renamed.ImageWidth - x1; int w = (w0 < w1) ? w0 : w1; int h0 = ImageHeight - y0; int h1 = ref_Renamed.ImageHeight - y1; int h = (h0 < h1) ? h0 : h1; if ((w > 0) && (h > 0)) { PixelReference pixel = CreateGPixelReference(0); PixelReference refPixel = ref_Renamed.CreateGPixelReference(0); do { pixel.SetOffset(y0++, x0); refPixel.SetOffset(y1++, x1); if (!IsRampNeeded) { pixel.SetPixels(refPixel, w); } else { int i = w; do { pixel.CopyFrom(ref_Renamed.PixelRamp(refPixel)); pixel.IncOffset(); refPixel.IncOffset(); } while (--i > 0); } } while (--h > 0); } }