/// <summary> /// 判定指定的两张图片之间是否产生了碰撞 /// </summary> /// /// <param name="src"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="dest"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <returns></returns> public bool isPixelCollide(LImage src, float x1, float y1, LImage dest, float x2, float y2) { float width1 = x1 + src.GetWidth() - 1, height1 = y1 + src.GetHeight() - 1, width2 = x2 + dest.GetWidth() - 1, height2 = y2 + dest.GetHeight() - 1; int xstart = (int)Loon.Utils.MathUtils.Max(x1, x2), ystart = (int)Loon.Utils.MathUtils.Max(y1, y2), xend = (int)Loon.Utils.MathUtils.Min(width1, width2), yend = (int)Loon.Utils.MathUtils.Min(height1, height2); int toty = Loon.Utils.MathUtils.Abs(yend - ystart); int totx = Loon.Utils.MathUtils.Abs(xend - xstart); for (int y = 1; y < toty - 1; y++) { int ny = Loon.Utils.MathUtils.Abs(ystart - (int)y1) + y; int ny1 = Loon.Utils.MathUtils.Abs(ystart - (int)y2) + y; for (int x = 1; x < totx - 1; x++) { int nx = Loon.Utils.MathUtils.Abs(xstart - (int)x1) + x; int nx1 = Loon.Utils.MathUtils.Abs(xstart - (int)x2) + x; try { if (((src.GetPixel(nx, ny).PackedValue != LSystem.TRANSPARENT)) && ((dest.GetPixel(nx1, ny1).PackedValue != LSystem.TRANSPARENT))) { return(true); } } catch (Exception e) { Loon.Utils.Debugging.Log.Exception(e); } } } return(false); }
public virtual LImage SetTileBackground(LImage image, bool isReturn) { if (image == null) { return(null); } int layerWidth = GetWidth(); int layerHeight = GetHeight(); int tileWidth = image.GetWidth(); int tileHeight = image.GetHeight(); LImage tempImage = LImage.CreateImage(layerWidth, layerHeight, false); LGraphics g = tempImage.GetLGraphics(); for (int x = 0; x < layerWidth; x += tileWidth) { for (int y = 0; y < layerHeight; y += tileHeight) { g.DrawImage(image, x, y); } } g.Dispose(); if (isReturn) { return(tempImage); } tempImage.SetFormat(Loon.Core.Graphics.Opengl.LTexture.Format.SPEED); SetBackground(tempImage.GetTexture()); if (tempImage != null) { tempImage.Dispose(); tempImage = null; } return(null); }
public static LTexture FilterColor(string res, LColor height, Loon.Core.Graphics.Opengl.LTexture.Format format) { uint color = height.GetRGB(); LImage tmp = LImage.CreateImage(res); LImage image = LImage.CreateImage(tmp.GetWidth(), tmp.GetHeight(), true); LGraphics g = image.GetLGraphics(); g.DrawImage(tmp, 0, 0); g.Dispose(); if (tmp != null) { tmp.Dispose(); tmp = null; } Color[] pixels = image.GetPixels(); int size = pixels.Length; for (int i = 0; i < size; i++) { if (pixels[i].PackedValue == color) { pixels[i].PackedValue = LSystem.TRANSPARENT; } } image.SetFormat(format); image.SetPixels(pixels, image.GetWidth(), image.GetHeight()); LTexture texture = image.GetTexture(); if (image != null) { image.Dispose(); image = null; } return(texture); }
public static Polygon MakePolygon(LImage image) { if (image == null) { throw new RuntimeException("Image is null !"); } return(MakePolygon(image.GetIntPixels(), image.GetWidth(), image.GetHeight())); }
public static LTexture.Mask CreateMask(LImage image) { if (image == null) { throw new RuntimeException("Image is null !"); } return(CreateMask(image.GetIntPixels(), image.GetWidth(), image.GetHeight())); }
internal PackEntry(LImage image) { this.image = image; if (image != null) { this.fileName = image.GetPath(); this.width = image.GetWidth(); this.height = image.GetHeight(); } }
public LTexture Pack(Loon.Core.Graphics.Opengl.LTexture.Format format) { if (texture != null && !packing) { return(texture); } if (fileName != null) { texture = new LTexture(GLLoader.GetTextureData(fileName), format); texture.isExt = true; } else { LImage image = PackImage(); if (image == null) { return(null); } if (texture != null) { texture.Destroy(); texture = null; } if (colorMask != null) { Color[] pixels = image.GetPixels(); int size = pixels.Length; uint color = colorMask.GetRGB(); for (int i = 0; i < size; i++) { if (pixels[i].PackedValue == color) { pixels[i].PackedValue = LSystem.TRANSPARENT; } } image.SetPixels(pixels, image.GetWidth(), image.GetHeight()); } texture = new LTexture(GLLoader.GetTextureData(image), format); texture.isExt = true; if (image != null) { image.Dispose(); image = null; } } return(texture); }
public int PutImage(string name, LImage image) { CheckPacked(); if (image == null) { throw new NullReferenceException(); } if (image.GetWidth() <= 0 || image.GetHeight() <= 0) { throw new ArgumentException( "width and height must be positive"); } this.temps.Put(name, new PackEntry(image)); this.packing = true; this.count++; return(temps.Size() - 1); }
public static LTexture GetRMXPDialog(string fileName, int width, int height) { if (lazyImages == null) { lazyImages = new Dictionary <string, LTexture>(10); } LImage dialog = LImage.CreateImage(fileName); int w = dialog.GetWidth(); Color[] pixels = dialog.GetPixels(); int index = -1; int count = 0; uint pixel; for (int i = 0; i < 5; i++) { pixel = pixels[(141 + i) + w * 12].PackedValue; if (index == -1) { index = (int)pixel; } if (index == pixel) { count++; } } if (count == 5) { return(GetRMXPDialog(dialog, width, height, 16, 5)); } else if (count == 1) { return(GetRMXPDialog(dialog, width, height, 27, 5)); } else if (count == 2) { return(GetRMXPDialog(dialog, width, height, 20, 5)); } else { return(GetRMXPDialog(dialog, width, height, 27, 5)); } }
public static LImage GetResize(LImage image, int w, int h) { if (image == null) { return(null); } if (image.width == w && image.height == h) { return(image); } LImage result = LImage.CreateImage(w, h, image.HasAlpha()); LGraphics g = result.GetLGraphics(); g.DrawImage(image, 0, 0, w, h, 0, 0, image.GetWidth(), image.GetHeight()); g.Dispose(); return(result); }
public static LTexture FilterLimitColor(string res, LColor start, LColor end, Loon.Core.Graphics.Opengl.LTexture.Format format) { int sred = start.R; int sgreen = start.G; int sblue = start.B; int ered = end.R; int egreen = end.G; int eblue = end.B; LImage tmp = LImage.CreateImage(res); LImage image = LImage.CreateImage(tmp.GetWidth(), tmp.GetHeight(), true); LGraphics g = image.GetLGraphics(); g.DrawImage(tmp, 0, 0); g.Dispose(); if (tmp != null) { tmp.Dispose(); tmp = null; } Color[] pixels = image.GetPixels(); int size = pixels.Length; for (int i = 0; i < size; i++) { Color pixel = pixels[i]; if ((pixel.R >= sred && pixel.G >= sgreen && pixel.B >= sblue) && (pixel.R <= ered && pixel.G <= egreen && pixel.B <= eblue)) { pixels[i].PackedValue = LSystem.TRANSPARENT; } } image.SetFormat(format); image.SetPixels(pixels, image.GetWidth(), image.GetHeight()); LTexture texture = image.GetTexture(); if (image != null) { image.Dispose(); image = null; } return(texture); }
private void InitDesktop() { if (desktop != null && sprites != null) { return; } this.desktop = new Desktop(this, GetWidth(), GetHeight()); this.sprites = new Sprites(GetWidth(), GetHeight()); if (dialog == null) { LImage tmp = LImage.CreateImage(GetWidth() - 20, GetHeight() / 2 - 20, true); LGraphics g = tmp.GetLGraphics(); g.SetColor(0, 0, 0, 125); g.FillRect(0, 0, tmp.GetWidth(), tmp.GetHeight()); g.Dispose(); g = null; dialog = new LTexture(GLLoader.GetTextureData(tmp)); if (tmp != null) { tmp.Dispose(); tmp = null; } } this.message = new LMessage(dialog, 0, 0); this.message.SetFontColor(LColor.white); int size = message.GetWidth() / (message.GetMessageFont().GetSize()); if (LSystem.scaleWidth != 1 || LSystem.scaleHeight != 1) { if (size % 2 != 0) { size = size + 2; } else { size = size + 3; } } else { if (size % 2 != 0) { size = size - 3; } else { size = size - 4; } } this.message.SetMessageLength(size); this.message.SetLocation((GetWidth() - message.GetWidth()) / 2, GetHeight() - message.GetHeight() - 10); this.message.SetVisible(false); this.select = new LSelect(dialog, 0, 0); this.select.SetLocation(message.X(), message.Y()); this.scrCG = new AVGCG(); this.desktop.Add(message); this.desktop.Add(select); this.select.SetVisible(false); }
public PShadowEffect(LImage img, LImage back, int x, int y, int w, int h) { if (deasilTrans == null || widdershinTrans == null) { deasilTrans = new Color[max_pixel]; for (int i = 0; i < max_pixel; i++) { deasilTrans[i] = new Color(i, i, i); } int count = 0; widdershinTrans = new Color[max_pixel]; for (int i = 0; i < max_pixel; i++) { widdershinTrans[count++] = deasilTrans[i]; } } this.SetLocation(x, y); this.width = w; this.height = h; this.visible = true; LImage temp = null; if (back == null) { this.scaleWidth = width / 2; this.scaleHeight = height / 2; temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight); this.image = LImage.CreateImage(scaleWidth, scaleHeight, true); this.finalDrawPixels = temp.GetPixels(); this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels); if (temp != null) { temp.Dispose(); temp = null; } } else { this.scaleWidth = width / 2; this.scaleHeight = height / 2; temp = GraphicsUtils.GetResize(img, scaleWidth, scaleHeight); this.image = LImage.CreateImage(scaleWidth, scaleHeight, true); if (back.GetWidth() == scaleWidth && back.GetHeight() == scaleHeight) { this.finalBackgroundPixels = back.GetPixels(); this.backgroundPixels = (Color[])CollectionUtils .CopyOf(finalBackgroundPixels); } else { LImage tmp = GraphicsUtils.GetResize(back, scaleWidth, scaleHeight); this.finalBackgroundPixels = tmp.GetPixels(); if (tmp != null) { tmp.Dispose(); tmp = null; } this.backgroundPixels = (Color[])CollectionUtils .CopyOf(finalBackgroundPixels); } this.finalDrawPixels = temp.GetPixels(); this.nowDrawPixels = (Color[])CollectionUtils.CopyOf(finalDrawPixels); } this.SetBlackToWhite(flag); if (temp != null) { temp.Dispose(); temp = null; } if (img != null) { img.Dispose(); img = null; } if (back != null) { back.Dispose(); back = null; } }
public PShadowEffect(LImage img, LImage back, int x, int y) : this(img, back, x, y, img.GetWidth(), img.GetHeight()) { }
public virtual LImage SetTileBackground(LImage image, bool isReturn) { if (image == null) { return null; } int layerWidth = GetWidth(); int layerHeight = GetHeight(); int tileWidth = image.GetWidth(); int tileHeight = image.GetHeight(); LImage tempImage = LImage.CreateImage(layerWidth, layerHeight, false); LGraphics g = tempImage.GetLGraphics(); for (int x = 0; x < layerWidth; x += tileWidth) { for (int y = 0; y < layerHeight; y += tileHeight) { g.DrawImage(image, x, y); } } g.Dispose(); if (isReturn) { return tempImage; } tempImage.SetFormat(Loon.Core.Graphics.Opengl.LTexture.Format.SPEED); SetBackground(tempImage.GetTexture()); if (tempImage != null) { tempImage.Dispose(); tempImage = null; } return null; }
public int PutImage(string name, LImage image) { CheckPacked(); if (image == null) { throw new NullReferenceException(); } if (image.GetWidth() <= 0 || image.GetHeight() <= 0) { throw new ArgumentException( "width and height must be positive"); } this.temps.Put(name, new PackEntry(image)); this.packing = true; this.count++; return temps.Size() - 1; }
private static LTexture GetRMXPDialog(LImage rmxpImage, int width, int height, int size, int offset) { if (lazyImages == null) { lazyImages = new Dictionary <string, LTexture>(10); } string keyName = "dialog" + width + "|" + height; LTexture lazy = (LTexture)CollectionUtils.Get(lazyImages, keyName); if (lazy == null) { try { int objWidth = 64; int objHeight = 64; int x1 = 128; int x2 = 192; int y1 = 0; int y2 = 64; int center_size = objHeight - size * 2; LImage lazyImage = null; LImage image = null; LImage messageImage = null; image = GraphicsUtils.DrawClipImage(rmxpImage, objWidth, objHeight, x1, y1, x2, y2); LImage centerTop = GraphicsUtils.DrawClipImage(image, center_size, size, size, 0); LImage centerDown = GraphicsUtils.DrawClipImage(image, center_size, size, size, objHeight - size); LImage leftTop = GraphicsUtils.DrawClipImage(image, size, size, 0, 0); LImage leftCenter = GraphicsUtils.DrawClipImage(image, size, center_size, 0, size); LImage leftDown = GraphicsUtils.DrawClipImage(image, size, size, 0, objHeight - size); LImage rightTop = GraphicsUtils.DrawClipImage(image, size, size, objWidth - size, 0); LImage rightCenter = GraphicsUtils.DrawClipImage(image, size, center_size, objWidth - size, size); LImage rightDown = GraphicsUtils.DrawClipImage(image, size, size, objWidth - size, objHeight - size); lazyImage = centerTop; lazyImage = LImage.CreateImage(width, height, true); LGraphics g = lazyImage.GetLGraphics(); g.SetAlpha(0.5f); messageImage = GraphicsUtils.DrawClipImage(rmxpImage, 128, 128, 0, 0, 128, 128); messageImage = GraphicsUtils.GetResize(messageImage, width - offset, height - offset); messageImage.XNAUpdateAlpha(125); g.DrawImage(messageImage, (lazyImage.Width - messageImage.Width) / 2 + 1, (lazyImage.Height - messageImage .Height) / 2 + 1); LImage tmp = GraphicsUtils.GetResize(centerTop, width - (size * 2), size); g.DrawImage(tmp, size, 0); if (tmp != null) { tmp.Dispose(); tmp = null; } tmp = GraphicsUtils.GetResize(centerDown, width - (size * 2), size); g.DrawImage(tmp, size, height - size); if (tmp != null) { tmp.Dispose(); tmp = null; } g.DrawImage(leftTop, 0, 0); tmp = GraphicsUtils.GetResize(leftCenter, leftCenter.GetWidth(), width - (size * 2)); g.DrawImage(tmp, 0, size); if (tmp != null) { tmp.Dispose(); tmp = null; } g.DrawImage(leftDown, 0, height - size); int right = width - size; g.DrawImage(rightTop, right, 0); tmp = GraphicsUtils.GetResize(rightCenter, leftCenter .Width, width - (size * 2)); g.DrawImage(tmp, right, size); if (tmp != null) { tmp.Dispose(); tmp = null; } g.DrawImage(rightDown, right, height - size); g.Dispose(); lazy = lazyImage.GetTexture(); lazyImages.Add(keyName, lazy); image.Dispose(); messageImage.Dispose(); centerTop.Dispose(); centerDown.Dispose(); leftTop.Dispose(); leftCenter.Dispose(); leftDown.Dispose(); rightTop.Dispose(); rightCenter.Dispose(); rightDown.Dispose(); image = null; messageImage = null; centerTop = null; centerDown = null; leftTop = null; leftCenter = null; leftDown = null; rightTop = null; rightCenter = null; rightDown = null; } catch (Exception ex) { Loon.Utils.Debugging.Log.Exception(ex); } } return(lazy); }