public void SetPosColor(EPoint pos, Color clr) { Graphics g = Graphics.FromImage(this.m_bmp); ERectangle rct = new ERectangle(pos.X, pos.Y, 1, 1) * this.SquareSide; g.FillRectangle(new SolidBrush(clr), rct.ToRectangle()); }
public static void SplitImage(Document psd, int layerIndex, string outputFilePrefix) { ImageResources.GridGuidesInfo guidesInfo = (ImageResources.GridGuidesInfo)psd.GetResource(typeof(ImageResources.GridGuidesInfo)); List <int> vertical = new List <int>(); List <ImageResources.GridGuidesInfo.GridGuide> guides = guidesInfo.GetGuidesByAlignment(false); foreach (ImageResources.GridGuidesInfo.GridGuide gg in guides) { vertical.Add((int)gg.LocationInPixels); } vertical.Add((int)psd.Header.Rows); List <int> horizontal = new List <int>(); guides = guidesInfo.GetGuidesByAlignment(true); foreach (ImageResources.GridGuidesInfo.GridGuide gg in guides) { horizontal.Add((int)gg.LocationInPixels); } horizontal.Add((int)psd.Header.Columns); Bitmap bmp = psd.Layers[layerIndex].Bitmap; int lastX = 0; int cnt = 0; foreach (int x in horizontal) { int lastY = 0; foreach (int y in vertical) { ERectangle rct = ERectangle.FromLTRB(lastX, lastY, x, y); Bitmap bmpNew = new Bitmap(rct.Width, rct.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb); Graphics g = Graphics.FromImage(bmpNew); g.DrawImage(bmp, new Rectangle(0, 0, rct.Width, rct.Height), rct.ToRectangle(), GraphicsUnit.Pixel); g.Dispose(); //TODO: examine bitmap and see if it can be reduced (e.g. middle parts are probably the same) Endogine.BitmapHelpers.BitmapHelper.Save(bmpNew, outputFilePrefix + "_slice" + cnt + ".png"); cnt++; lastY = y; } lastX = x; } }
public override void SubDraw() { ERectangleF rctDraw = _sp.CalcRectInDrawTarget(); //attribs.SetColorMatrix(new ColorMatrix(), ColorMatrixFlag.Default, ColorAdjustType.Bitmap); if (_sp.Ink == RasterOps.ROPs.Copy || _sp.Ink == RasterOps.ROPs.BgTransparent || _sp.DrawToSprite == null) //TODO: allow RasterOps on root sprite. //if (false) { if (_sp.Rect.Width <= 0 || _sp.Rect.Height <= 0) { return; } PointF ulCorner1 = new PointF(rctDraw.X, rctDraw.Y); PointF urCorner1 = new PointF(rctDraw.OppositeX, rctDraw.Y); PointF llCorner1 = new PointF(rctDraw.X, rctDraw.OppositeY); PointF[] destPara1 = { ulCorner1, urCorner1, llCorner1 }; ERectangle rctSrc = _sp.SourceRect; //m_sp.Member.GetRectForFrame(m_sp.MemberAnimationFrame); //RectangleF rctfCropped = m_sp.GetPortionOfMemberToDisplay(); //g.FillRectangle(new SolidBrush(Color.Red), rctDraw); Graphics g = Graphics.FromImage(_sp.DrawToSprite.Member.Bitmap); ImageAttributes attribs = new ImageAttributes(); attribs.SetWrapMode(WrapMode.Tile); if (_sp.Ink == RasterOps.ROPs.BgTransparent) { attribs.SetColorKey(_sp.Member.ColorKey, _sp.Member.ColorKey); } g.SmoothingMode = SmoothingMode.None; g.CompositingMode = CompositingMode.SourceOver; g.CompositingQuality = CompositingQuality.Invalid; g.DrawImage(_sp.Member.Bitmap, destPara1, rctSrc.ToRectangleF(), GraphicsUnit.Pixel, attribs); g.Dispose(); } else { //since it's difficult to write a RasterOp algorithm that both does effects and scales/interpolates properly, //I cheat by creating a temporary scaled bitmap if (_sp.Rect.ToERectangle().Width <= 0 || _sp.Rect.ToERectangle().Height <= 0) { return; } Bitmap bmp = _sp.Member.Bitmap; ERectangle rctSrc = _sp.SourceRect; if (_sp.Scaling.X != 1 || _sp.Scaling.Y != 1 || _sp.Color != Color.White) { //TODO: other/faster resizing algorithms at //http://www.codeproject.com/csharp/ImgResizOutperfGDIPlus.asp rctSrc = _sp.Rect.ToERectangle(); rctSrc.Offset(-rctSrc.X, -rctSrc.Y); bmp = new Bitmap(_sp.Rect.ToERectangle().Width, _sp.Rect.ToERectangle().Height, _sp.Member.Bitmap.PixelFormat); //m_sp.Member.Bitmap, new Size(m_sp.RectInt.Width, m_sp.RectInt.Height)); Graphics g = Graphics.FromImage(bmp); ImageAttributes attribs = new ImageAttributes(); ColorMatrix colorMatrix = new ColorMatrix(); colorMatrix.Matrix00 = (float)_sp.Color.R / 255; colorMatrix.Matrix11 = (float)_sp.Color.G / 255; colorMatrix.Matrix22 = (float)_sp.Color.B / 255; colorMatrix.Matrix33 = 1.00f; // alpha colorMatrix.Matrix44 = 1.00f; // w attribs.SetColorMatrix(colorMatrix); g.DrawImage(_sp.Member.Bitmap, rctSrc.ToRectangle(), _sp.SourceRect.X, _sp.SourceRect.Y, _sp.SourceRect.Width, _sp.SourceRect.Height, GraphicsUnit.Pixel, attribs); g.Dispose(); } RasterOps.CopyPixels(_sp.DrawToSprite.Member.Bitmap, bmp, rctDraw, rctSrc, _sp.DrawToSprite.SourceRect, (int)_sp.Ink, _sp.Blend); } }