private byte[] GetImage(int index) { return(MDataFile.Read(tdataPaths[tiles[index].tdataPathId], tiles[index].imgOffset, tiles[index].imgLength)); }
public void Paint(bool originalOnly = false, bool centerOnly = false) { // clear image Graphics g = Graphics.FromImage(pbox.Image); if (!originalOnly) { g.Clear(bgColor); } else { g.Clear(Color.FromArgb(0, 0, 0, 0)); } // draw tiles for (int j = 0; j < rowCount; j++) { for (int i = 0; i < columnCount; i++) { int offsetx = i - centerX; int offsety = j - centerY; if (centerOnly && (offsetx != 0 || offsety != 0)) { continue; } TileXY xy = centerTilexy.GetNeighbor(offsetx, offsety); if (tiles.ContainsKey(xy)) { TileMeta tmeta = tiles[xy]; byte[] imgBuff = MDataFile.Read(tdataPaths[tmeta.tdataPathId], tmeta.imgOffset, tmeta.imgLength); Rectangle rect = new Rectangle(i * imageSize, j * imageSize, imageSize, imageSize); g.DrawImage(Image.FromStream(new MemoryStream(imgBuff)), rect); if (!originalOnly && !_isShowValidGraph && distinguishPng && tmeta.hasAlpha) { g.FillRectangle(brushCoverPNG, rect); } } } } if (!originalOnly) { // get current utm correction zone int zone = Int32.Parse(tbUtmCorrectionZone.Text); // get top left tile xy TileXY topLeftTileXY = centerTilexy.GetNeighbor(-centerX, -centerY); // draw masks if (!_isShowValidGraph) { foreach (Mask m in masks) { // draw utm corrected masks g.FillPolygon(m.type == 0 ? brushMaskSkip : (m.type == 1 ? brushMaskNewRange : brushMaskRemove), m.GetUtmCorrectedRelativePolygon(topLeftTileXY, zone)); } } // show valid graph if (_isShowValidGraph && pixelValidRange != null) { pixelValidRange.DrawValidGraph((Bitmap)pbox.Image); } // draw mouse line if (isMouseDown) { g.DrawRectangle(penMouseDragLine, Math.Min(mousePositionNow.X, mousePositionStart.X), Math.Min(mousePositionNow.Y, mousePositionStart.Y), Math.Abs(mousePositionNow.X - mousePositionStart.X), Math.Abs(mousePositionNow.Y - mousePositionStart.Y)); // draw utm corrected line Point start = new Point(Math.Min(mousePositionStart.X, mousePositionNow.X), Math.Min(mousePositionStart.Y, mousePositionNow.Y)); Point end = new Point(Math.Max(mousePositionStart.X, mousePositionNow.X), Math.Max(mousePositionStart.Y, mousePositionNow.Y)); Mask mTmp = new Mask(start, end, topLeftTileXY); g.DrawPolygon(penMouseDragLineUtmCorrected, mTmp.GetUtmCorrectedRelativePolygon(topLeftTileXY, zone)); } } pbox.Refresh(); ShowCenterTileInfo(); }