private void BuildMap() { // generate and display a preview of the current map if (LayerBlock == null) { return; } BufferedGraphicsContext currentContext; BufferedGraphics mapBuffer; currentContext = BufferedGraphicsManager.Current; mapBuffer = currentContext.Allocate(Graphics.FromImage(renderedMap), new Rectangle(0, 0, 256 * 16, 256 * 16)); for (int x = 0; x < 256; x++) { for (int y = 0; y < 256; y++) { if (x >= 256 || y >= 256) { continue; } UInt16 imageNum = LayerBlock.GetTextureIDAtLocation(x, y); int posX = x * 16; int posY = y * 16; int srcX = (imageNum % TNameBlock.NumTilesPerRow) * 16; int srcY = (imageNum / TNameBlock.NumTilesPerRow) * 16; mapBuffer.Graphics.DrawImage(tileSheet, new Rectangle(new Point(posX, posY), new Size(16, 16)), srcX, srcY, 16.0F, 16.0F, GraphicsUnit.Pixel); if (LayerBlock2 != null) { imageNum = LayerBlock2.GetTextureIDAtLocation(x, y); if (imageNum < TNameBlock.NumTiles) { srcX = (imageNum % TNameBlock.NumTilesPerRow) * 16; srcY = (imageNum / TNameBlock.NumTilesPerRow) * 16; mapBuffer.Graphics.DrawImage(tileSheet, new Rectangle(new Point(posX, posY), new Size(16, 16)), srcX, srcY, 16.0F, 16.0F, GraphicsUnit.Pixel); } } } } if (ObjectLayerBlocks != null && DataFileReference != null) { ObjectLayerBlocks.ForEach(objectLayer => { for (int o = 0; o < objectLayer.m_numObjects; o++) { OLAYObject obj = objectLayer.GetObjectByIndex(o); if (DataFileReference.ObjectsByCatAndInstance.ContainsKey(obj.m_itemCategory) == false) { continue; } else if (DataFileReference.ObjectsByCatAndInstance[obj.m_itemCategory].ContainsKey(obj.m_itemSubType) == false) { continue; } AMObject aObj = DataFileReference.GetObject(obj.m_itemCategory, obj.m_itemSubType); if (aObj != null && aObj.SpriteImage != null) { mapBuffer.Graphics.DrawImage(aObj.SpriteImage, new Rectangle(new Point(obj.m_itemPosX, obj.m_itemPosY), new Size(aObj.SpriteImage.Width, aObj.SpriteImage.Height)), 0, 0, aObj.SpriteImage.Width, aObj.SpriteImage.Height, GraphicsUnit.Pixel); } } }); } mapBuffer.Render(); mapBuffer.Dispose(); new Task(() => { textureMapPreviewBox.Image = renderedMap; label1.Visible = false; textureMapPreviewBox.Invalidate(); pictureBox1.Image = (Bitmap)renderedMap.Clone(); pictureBox1.Invalidate(); }).Start(scheduler); }