コード例 #1
0
ファイル: POI.cs プロジェクト: FSofTlpz/GarminCore
        public void Write(BinaryReaderWriter bw, int iCodepage)
        {
            bw.Write(Options);
            XBitmapDay.WriteAsPoi(bw);
            if (WithNightXpm)
            {
                XBitmapNight.WriteAsPoi(bw);
            }
            if (WithString)
            {
                Text.Write(bw, iCodepage);
            }
            if (WithExtendedOptions)
            {
                bw.Write(ExtOptions);
                switch (FontColType)
                {
                case FontColours.Day:
                    BinaryColor.WriteColor(bw, colFontColour[0]);
                    break;

                case FontColours.Night:
                    BinaryColor.WriteColor(bw, colFontColour[1]);
                    break;

                case FontColours.DayAndNight:
                    BinaryColor.WriteColorTable(bw, colFontColour);
                    break;
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// schreibt das Bitmap als POI in den Stream (falls der Colormode stimmt, sonst Exception)
        /// </summary>
        /// <param name="bw"></param>
        public void WriteAsPoi(BinaryReaderWriter bw)
        {
            switch (Colormode)
            {
            case BitmapColorMode.POI_SIMPLE:
            case BitmapColorMode.POI_TR:
                bw.Write((byte)Width);
                bw.Write((byte)Height);
                bw.Write((byte)colColorTable.Length);
                bw.Write((byte)Colormode);
                BinaryColor.WriteColorTable(bw, colColorTable, false);
                data.Write(bw);
                break;

            case BitmapColorMode.POI_ALPHA:
                bw.Write((byte)Width);
                bw.Write((byte)Height);
                bw.Write((byte)colColorTable.Length);
                bw.Write((byte)Colormode);
                BinaryColor.WriteColorTable(bw, colColorTable, true);
                data.Write(bw);
                break;

            default:
                throw new Exception(string.Format("Unerlaubter ColorMode für Bitmap ({0:x2}).", Colormode));
            }
        }
コード例 #3
0
ファイル: POI.cs プロジェクト: FSofTlpz/GarminCore
        public void Read(BinaryReaderWriter br)
        {
            try {
                Options = br.ReadByte();
                uint iWidth  = br.ReadByte();
                uint iHeight = br.ReadByte();
                colsday         = br.ReadByte();
                ColormodeDay    = (BitmapColorMode)br.ReadByte();
                this.XBitmapDay = new PixMap(iWidth, iHeight, colsday, ColormodeDay, br);
                if (WithNightXpm)
                {
                    colsnight      = br.ReadByte();
                    ColormodeNight = (BitmapColorMode)br.ReadByte();
                    if (!NightXpmHasData)
                    {
                        Color[] col = BinaryColor.ReadColorTable(br, colsnight);
                        XBitmapNight = new PixMap(XBitmapDay);
                        XBitmapNight.SetNewColors(col);
                    }
                    else
                    {
                        XBitmapNight = new PixMap(Width, Height, colsnight, ColormodeNight, br);
                    }
                }
                if (WithString)
                {
                    Text = new MultiText(br);
                }
                if (WithExtendedOptions)
                {
                    ExtOptions = br.ReadByte();
                    switch (FontColType)
                    {
                    case FontColours.Day:
                        colFontColour[0] = BinaryColor.ReadColor(br);
                        break;

                    case FontColours.Night:
                        colFontColour[1] = BinaryColor.ReadColor(br);
                        break;

                    case FontColours.DayAndNight:
                        colFontColour = BinaryColor.ReadColorTable(br, 2);
                        break;
                    }
                }
            } catch (Exception ex) {
                throw new Exception(string.Format("Fehler beim Lesen des Punktes 0x{0:x} 0x{1:x}: {2}", Type, Subtype, ex.Message));
            }
        }
コード例 #4
0
 /// <summary>
 /// schreibt nur die Farbtabelle (für Polygon/Polyline)
 /// </summary>
 /// <param name="bw"></param>
 /// <param name="bWithAlpha"></param>
 public void WriteColorTable(BinaryReaderWriter bw)
 {
     BinaryColor.WriteColorTable(bw, colColorTable, false);
 }
コード例 #5
0
        /// <summary>
        /// erzeugt ein Bild mit max. 256 Farben (auch 0 Farben); transparent ist die "Dummy"-Farbe; liest die Farbtabelle und die Daten ev. aus dem Stream
        /// </summary>
        /// <param name="iWidth"></param>
        /// <param name="iHeight"></param>
        /// <param name="iColors">Anzahl der einzulesenden Farben</param>
        /// <param name="cm"></param>
        /// <param name="br"></param>
        public PixMap(uint iWidth, uint iHeight, int iColors, BitmapColorMode cm, BinaryReaderWriter br = null)
        {
            data          = new PixData(iWidth, iHeight, BitsPerPixel4BitmapColorMode(cm, iColors));
            Colormode     = cm;
            colColorTable = new Color[iColors];
            for (int i = 0; i < iColors; i++)   // Init. der Farbtabelle
            {
                colColorTable[i] = TransparentColor;
            }
            if (cm == BitmapColorMode.POLY1TR)  // in diesem Spezialfall alle Pixel/Bits auf 1 setzen
            {
                data.SetAllBits();
            }

            if (br != null)
            {
                if (iColors == 0)      // keine Farbtabelle, d.h. Pixel sind direkt durch ihre Farben definiert
                {
                    colColorTable = new Color[0];
                    switch (Colormode)
                    {
                    case BitmapColorMode.POI_SIMPLE:
                        data = new PixData(iWidth, iHeight, BpP, br);
                        break;

                    case BitmapColorMode.POI_TR:
                        /* Keine Ahnung warum. Eigentlich wären überhaupt keine Daten nötig.
                         * Mit dem 1 Bit könnten 2 Farben gemeint sein:
                         * 0 --> transparent
                         * 1 --> ???
                         * In der Praxis scheint aber immer 0 darin zu stehen.
                         */
                        data = new PixData(iWidth, iHeight, BpP, br);
                        //for(int i=0;i<rawimgdata.Length;i++)
                        //   if (rawimgdata[i] != 0) {
                        //      Debug.WriteLine("Bitmap mit iColors==0 und NICHT alle Daten=0");
                        //      break;
                        //   }
                        break;

                    case BitmapColorMode.POI_ALPHA:
                        data = new PixData(iWidth, iHeight, BpP, br);
                        break;

                    case BitmapColorMode.POLY1TR:
                    case BitmapColorMode.POLY2:
                        throw new Exception(string.Format("Für den ColorMode {0} muß eine Farbtabelle mit eingelesen werden.", Colormode));

                    default:
                        throw new Exception(string.Format("Unbekannter ColorMode für Bitmap ({0:x2}).", Colormode));
                    }
                }
                else
                {
                    switch (Colormode)
                    {
                    case BitmapColorMode.POI_SIMPLE:
                    case BitmapColorMode.POI_TR:
                        colColorTable = BinaryColor.ReadColorTable(br, iColors, false);
                        break;

                    case BitmapColorMode.POI_ALPHA:
                        colColorTable = BinaryColor.ReadColorTable(br, iColors, true);
                        break;

                    case BitmapColorMode.POLY1TR:
                        if (iColors != 1)
                        {
                            throw new Exception(string.Format("Für den ColorMode {0} kann nur 1 Farbe (nicht {1}) eingelesen werden.",
                                                              Colormode, iColors));
                        }
                        colColorTable = BinaryColor.ReadColorTable(br, 1, false);
                        break;

                    case BitmapColorMode.POLY2:
                        if (iColors != 2)
                        {
                            throw new Exception(string.Format("Für den ColorMode {0} können nur 2 Farben (nicht {1}) eingelesen werden.",
                                                              Colormode, iColors));
                        }
                        colColorTable = BinaryColor.ReadColorTable(br, 2, false);
                        break;

                    default:
                        throw new Exception(string.Format("Unbekannter ColorMode für Bitmap ({0:x2}).", Colormode));
                    }
                    data = new PixData(iWidth, iHeight, BpP, br);
                }
            }
        }
コード例 #6
0
ファイル: Polyline.cs プロジェクト: FSofTlpz/GarminCore
        public void Write(BinaryReaderWriter bw, int iCodepage)
        {
            bw.Write(Options);
            bw.Write(Options2);
            switch (Polylinetype)
            {
            case PolylineType.Day2:
                BinaryColor.WriteColorTable(bw, colDayColor);
                break;

            case PolylineType.Day2_Night2:
                BinaryColor.WriteColorTable(bw, colDayColor);
                BinaryColor.WriteColorTable(bw, colNightColor);
                break;

            case PolylineType.Day1_Night2:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                BinaryColor.WriteColorTable(bw, colNightColor);
                break;

            case PolylineType.NoBorder_Day2_Night1:
                BinaryColor.WriteColorTable(bw, colDayColor);
                BinaryColor.WriteColor(bw, colNightColor[0]);
                break;

            case PolylineType.NoBorder_Day1:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                break;

            case PolylineType.NoBorder_Day1_Night1:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                BinaryColor.WriteColor(bw, colNightColor[0]);
                break;
            }

            if (BitmapHeight == 0) // Linien- und Randbreite ermitteln
            {
                switch (Polylinetype)
                {
                case PolylineType.Day2:
                case PolylineType.Day2_Night2:
                case PolylineType.Day1_Night2:
                    bw.Write((byte)InnerWidth);
                    if (InnerWidth > 0)
                    {
                        bw.Write((byte)(2 * BorderWidth + InnerWidth));
                    }
                    break;

                case PolylineType.NoBorder_Day2_Night1:
                case PolylineType.NoBorder_Day1:
                case PolylineType.NoBorder_Day1_Night1:
                    bw.Write((byte)InnerWidth);
                    break;
                }
            }
            else
            {
                XBitmapDay.WriteRawdata(bw);
            }

            if (WithString)
            {
                Text.Write(bw, iCodepage);
            }

            if (WithExtendedOptions)   // es folgen weitere (max. 2) Farben
            {
                bw.Write(ExtOptions);
                switch (FontColType)
                {
                case FontColours.Day:
                    BinaryColor.WriteColor(bw, colFontColour[0]);
                    break;

                case FontColours.Night:
                    BinaryColor.WriteColor(bw, colFontColour[1]);
                    break;

                case FontColours.DayAndNight:
                    BinaryColor.WriteColorTable(bw, colFontColour);
                    break;
                }
            }
        }
コード例 #7
0
ファイル: Polyline.cs プロジェクト: FSofTlpz/GarminCore
        public void Read(BinaryReaderWriter br)
        {
            long startpos = br.BaseStream.Position;

            try {
                Options  = br.ReadByte();
                Options2 = br.ReadByte();

                // Farben einlesen (1 bis max. 4)
                switch (Polylinetype)
                {
                case PolylineType.Day2:
                    colDayColor = BinaryColor.ReadColorTable(br, 2);
                    break;

                case PolylineType.Day2_Night2:
                    colDayColor   = BinaryColor.ReadColorTable(br, 2);
                    colNightColor = BinaryColor.ReadColorTable(br, 2);
                    break;

                case PolylineType.Day1_Night2:
                    colDayColor[0] = BinaryColor.ReadColor(br);
                    colNightColor  = BinaryColor.ReadColorTable(br, 2);
                    break;

                case PolylineType.NoBorder_Day2_Night1:
                    colDayColor      = BinaryColor.ReadColorTable(br, 2);
                    colNightColor[0] = BinaryColor.ReadColor(br);
                    break;

                case PolylineType.NoBorder_Day1:
                    colDayColor[0] = BinaryColor.ReadColor(br);
                    break;

                case PolylineType.NoBorder_Day1_Night1:
                    colDayColor[0]   = BinaryColor.ReadColor(br);
                    colNightColor[0] = BinaryColor.ReadColor(br);
                    break;
                }

                if (BitmapHeight == 0) // Linien- und Randbreite ermitteln
                {
                    switch (Polylinetype)
                    {
                    case PolylineType.Day2:
                    case PolylineType.Day2_Night2:
                    case PolylineType.Day1_Night2:
                        InnerWidth = br.ReadByte();
                        if (InnerWidth > 0)              // sonst Bitmap, also KEINE BorderWidth
                        {
                            BorderWidth = (br.ReadByte() - InnerWidth) / 2;
                        }
                        break;

                    case PolylineType.NoBorder_Day2_Night1:
                    case PolylineType.NoBorder_Day1:
                    case PolylineType.NoBorder_Day1_Night1:
                        InnerWidth = br.ReadByte();      // es folgt KEINE BorderWidth
                        break;
                    }
                }
                else   // Bitmap einlesen (Höhe ist Thickness Pixel, Breite 32 Pixel, Dummyfarbe!)
                {
                    XBitmapDay = new PixMap(32, BitmapHeight, new Color[1] {
                        Color.White
                    }, BitmapColorMode.POLY1TR, br);
                }

                if (WithString)
                {
                    Text = new MultiText(br);
                }

                if (WithExtendedOptions)
                {
                    ExtOptions = br.ReadByte();
                    switch (FontColType)
                    {
                    case FontColours.Day:
                        colFontColour[0] = BinaryColor.ReadColor(br);
                        break;

                    case FontColours.Night:
                        colFontColour[1] = BinaryColor.ReadColor(br);
                        break;

                    case FontColours.DayAndNight:
                        colFontColour = BinaryColor.ReadColorTable(br, 2);
                        break;
                    }
                }
            } catch (Exception ex) {
                throw new Exception(string.Format("Fehler beim Lesen der Linie 0x{0:x} 0x{1:x}: {2}", Type, Subtype, ex.Message));
            }
        }
コード例 #8
0
        public void Write(BinaryReaderWriter bw, int iCodepage)
        {
            bw.Write(Options);

            switch (Colortype)
            {
            case ColorType.Day1:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                break;

            case ColorType.Day1_Night1:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                BinaryColor.WriteColor(bw, colNightColor[0]);
                break;

            case ColorType.BM_Day2:
                XBitmapDay.WriteColorTable(bw);
                XBitmapDay.WriteRawdata(bw);
                break;

            case ColorType.BM_Day2_Night2:
                BinaryColor.WriteColorTable(bw, colDayColor);
                BinaryColor.WriteColorTable(bw, colNightColor);
                XBitmapDay.WriteRawdata(bw);
                break;

            case ColorType.BM_Day1_Night2:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                BinaryColor.WriteColorTable(bw, colNightColor);
                XBitmapDay.WriteRawdata(bw);
                break;

            case ColorType.BM_Day2_Night1:
                BinaryColor.WriteColorTable(bw, colDayColor);
                BinaryColor.WriteColor(bw, colNightColor[0]);
                XBitmapDay.WriteRawdata(bw);
                break;

            case ColorType.BM_Day1:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                XBitmapDay.WriteRawdata(bw);
                break;

            case ColorType.BM_Day1_Night1:
                BinaryColor.WriteColor(bw, colDayColor[0]);
                BinaryColor.WriteColor(bw, colNightColor[0]);
                XBitmapDay.WriteRawdata(bw);
                break;
            }
            if (WithString)
            {
                Text.Write(bw, iCodepage);
            }
            if (WithExtendedOptions)   // es folgen weitere (max. 2) Farben
            {
                bw.Write(ExtOptions);
                switch (FontColType)
                {
                case FontColours.Day:
                    BinaryColor.WriteColor(bw, colFontColour[0]);
                    break;

                case FontColours.Night:
                    BinaryColor.WriteColor(bw, colFontColour[1]);
                    break;

                case FontColours.DayAndNight:
                    BinaryColor.WriteColorTable(bw, colFontColour);
                    break;
                }
            }
        }
コード例 #9
0
        public void Read(BinaryReaderWriter br)
        {
            try {
                Options = br.ReadByte();

                // es folgen 1 bis max. 4 Farben und ev. 1 Bitmap
                switch (Colortype) // hier muss sicher noch überprüft werden, ob die Typen wirklich richtig interpretiert werden
                {
                case ColorType.Day1:
                    colDayColor[0] = BinaryColor.ReadColor(br);
                    break;

                case ColorType.Day1_Night1:
                    colDayColor[0]   = BinaryColor.ReadColor(br);
                    colNightColor[0] = BinaryColor.ReadColor(br);
                    break;

                case ColorType.BM_Day2:          // 2 Farben + 1x Pixeldaten
                    colDayColor = BinaryColor.ReadColorTable(br, 2);
                    XBitmapDay  = new PixMap(32, 32, colDayColor, BitmapColorMode.POLY2, br);
                    break;

                case ColorType.BM_Day2_Night2:   // 4 Farben + 1x Pixeldaten
                    colDayColor   = BinaryColor.ReadColorTable(br, 2);
                    colNightColor = BinaryColor.ReadColorTable(br, 2);
                    XBitmapDay    = new PixMap(32, 32, colDayColor, BitmapColorMode.POLY2, br);
                    XBitmapNight  = new PixMap(XBitmapDay);
                    XBitmapNight.SetNewColors(colNightColor);
                    break;

                case ColorType.BM_Day1_Night2:   // 3 Farben + 1x Pixeldaten
                    colDayColor[0] = BinaryColor.ReadColor(br);
                    colDayColor[1] = PixMap.TransparentColor;
                    colNightColor  = BinaryColor.ReadColorTable(br, 2);
                    XBitmapDay     = new PixMap(32, 32, colDayColor, BitmapColorMode.POLY2, br);
                    XBitmapNight   = new PixMap(XBitmapDay);
                    XBitmapNight.ChangeColorMode(BitmapColorMode.POLY2);
                    XBitmapNight.SetNewColors(colNightColor);
                    break;

                case ColorType.BM_Day2_Night1:   // 3 Farben + 1x Pixeldaten
                    colDayColor      = BinaryColor.ReadColorTable(br, 2);
                    colNightColor[0] = BinaryColor.ReadColor(br);
                    colNightColor[1] = PixMap.TransparentColor;
                    XBitmapDay       = new PixMap(32, 32, colDayColor, BitmapColorMode.POLY2, br);
                    XBitmapNight     = new PixMap(XBitmapDay);
                    XBitmapNight.ChangeColorMode(BitmapColorMode.POLY1TR);
                    XBitmapNight.SetNewColors(colNightColor);
                    break;

                case ColorType.BM_Day1:          // 1 Farbe + 1x Pixeldaten
                    colDayColor[0] = colNightColor[0] = BinaryColor.ReadColor(br);
                    colDayColor[1] = colNightColor[1] = PixMap.TransparentColor;
                    XBitmapDay     = new PixMap(32, 32, colDayColor, BitmapColorMode.POLY1TR, br);
                    break;

                case ColorType.BM_Day1_Night1:   // 2 Farben + 1x Pixeldaten
                    colDayColor[0]   = BinaryColor.ReadColor(br);
                    colDayColor[1]   = PixMap.TransparentColor;
                    colNightColor[0] = BinaryColor.ReadColor(br);
                    colNightColor[1] = PixMap.TransparentColor;
                    XBitmapDay       = new PixMap(32, 32, colDayColor, BitmapColorMode.POLY1TR, br);
                    XBitmapNight     = new PixMap(XBitmapDay);
                    XBitmapNight.SetNewColors(colNightColor);
                    break;
                }
                if (WithDayBitmap)
                {
                    // sicherheitshalber nochmal die Bitmapfarben übernehmen
                    DayColor1 = XBitmapDay.GetColor(0);
                    if (XBitmapDay.Colors > 1)
                    {
                        DayColor2 = XBitmapDay.GetColor(1);
                    }
                    if (XBitmapNight != null)
                    {
                        NightColor1 = XBitmapNight.GetColor(0);
                        if (XBitmapNight.Colors > 1)
                        {
                            NightColor2 = XBitmapNight.GetColor(1);
                        }
                    }
                }

                if (WithString)
                {
                    Text = new MultiText(br);
                }

                if (WithExtendedOptions)  // es folgen weitere (max. 2) Farben
                {
                    ExtOptions = br.ReadByte();
                    switch (FontColType)
                    {
                    case FontColours.Day:
                        colFontColour[0] = BinaryColor.ReadColor(br);
                        break;

                    case FontColours.Night:
                        colFontColour[1] = BinaryColor.ReadColor(br);
                        break;

                    case FontColours.DayAndNight:
                        colFontColour = BinaryColor.ReadColorTable(br, 2);
                        break;
                    }
                }
            } catch (Exception ex) {
                throw new Exception(string.Format("Fehler beim Lesen des Polygons 0x{0:x} 0x{1:x}: {2}", Type, Subtype, ex.Message));
            }
        }