示例#1
0
 private byte[] GetImage(int index)
 {
     return(MDataFile.Read(tdataPaths[tiles[index].tdataPathId], tiles[index].imgOffset, tiles[index].imgLength));
 }
示例#2
0
        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();
        }