Esempio n. 1
0
        private static bool ReadTGAInfo(byte[] WorkPtr, out STargaHeader TargaHeader)
        {
            TargaHeader.PostHeaderSkip = WorkPtr[0];
            TargaHeader.ColorMapType   = WorkPtr[1];
            TargaHeader.ImageType      = WorkPtr[2];
            TargaHeader.ColorMapStart  = BitConverter.ToUInt16(WorkPtr, 3);
            TargaHeader.ColorMapLength = BitConverter.ToUInt16(WorkPtr, 5);
            TargaHeader.ColorMapBits   = WorkPtr[7];
            TargaHeader.XStart         = BitConverter.ToUInt16(WorkPtr, 8);
            TargaHeader.YStart         = BitConverter.ToUInt16(WorkPtr, 10);
            TargaHeader.Width          = BitConverter.ToUInt16(WorkPtr, 12);
            TargaHeader.Height         = BitConverter.ToUInt16(WorkPtr, 14);
            TargaHeader.BPP            = WorkPtr[16];
            TargaHeader.Descriptor     = WorkPtr[17];

            // check the header
            if (TargaHeader.ColorMapType != 0 ||                // 0 = RGB, 1 = Palette
                // 1 = Palette, 2 = RGB, 3 = mono, 9 = RLE Palette, 10 = RLE RGB, 11 RLE mono
                (TargaHeader.ImageType != 2 && TargaHeader.ImageType != 10 && TargaHeader.ImageType != 9) ||
                (TargaHeader.BPP != 24 && TargaHeader.BPP != 32))
            {
#if DEBUG
                throw new NotImplementedException("Unsupported TGA mode");
#endif
#if ASSERTS_ENABLED
                if (((byte *)pTargaHeader)[0] == 'B' && ((byte *)pTargaHeader)[1] == 'M')
                {
                    assert(!"This TGA's header looks like a BMP!");             //  look at the first two bytes and see if they are 'BM'
                    // if so it's a BMP not a TGA
                }
                else
                {
                    byte *pColorMapType = NULL;
                    switch (TargaHeader.ColorMapType)
                    {
                    case 0:
                        pColorMapType = "RGB Color Map";
                        break;

                    case 1:
                        pColorMapType = "Palette Color Map";
                        break;

                    default:
                        pColorMapType = "<Illegal Color Map>";
                        break;
                    }
                    byte *pImageType = NULL;
                    switch (TargaHeader.ImageType)
                    {
                    case 1:
                        pImageType = "Palette Image Type";
                        break;

                    case 2:
                        pImageType = "RGB Image Type";
                        break;

                    case 3:
                        pImageType = "mono Image Type";
                        break;

                    case 9:
                        pImageType = "RLE Palette Image Type";
                        break;

                    case 10:
                        pImageType = "RLE RGB Image Type";
                        break;

                    case 11:
                        pImageType = "RLE mono Image Type";
                        break;

                    default:
                        pImageType = "<Illegal Image Type>";
                        break;
                    }
                    int      ColorDepth = TargaHeader.BPP;
                    CJString ErrorString;
                    ErrorString.Format("Image type %s %s (%u bpp) not supported!", pColorMapType, pImageType, ColorDepth);
                    ShowSystemMessage("TGA File IO Error", ErrorString.GetBytePtr(), "TGA Error");
                }
#endif // ASSERTS_ENABLED
                return(false);
            }

            return(true);
        }
Esempio n. 2
0
        //*********************************************************************************************************************
        static unsafe bool ReadTGAInfo(Byte *WorkPtr, out STargaHeader TargaHeader)
        {
            TargaHeader.PostHeaderSkip = WorkPtr[0];
            TargaHeader.ColorMapType   = WorkPtr[1];
            TargaHeader.ImageType      = WorkPtr[2];
            TargaHeader.ColorMapStart  = *((ushort *)(&WorkPtr[3]));
            TargaHeader.ColorMapLength = *((ushort *)(&WorkPtr[5]));
            TargaHeader.ColorMapBits   = WorkPtr[7];
            TargaHeader.XStart         = *((ushort *)(&WorkPtr[8]));
            TargaHeader.YStart         = *((ushort *)(&WorkPtr[10]));
            TargaHeader.Width          = *((ushort *)(&WorkPtr[12]));
            TargaHeader.Height         = *((ushort *)(&WorkPtr[14]));
            TargaHeader.BPP            = WorkPtr[16];
            TargaHeader.Descriptor     = WorkPtr[17];

            // check the header
            if (TargaHeader.ColorMapType != 0 ||        // 0 = RGB, 1 = Palette
                // 1 = Palette, 2 = RGB, 3 = mono, 9 = RLE Palette, 10 = RLE RGB, 11 RLE mono
                (TargaHeader.ImageType != 2 && TargaHeader.ImageType != 10 && TargaHeader.ImageType != 9) ||
                (TargaHeader.BPP != 24 && TargaHeader.BPP != 32))
            {
        #if ASSERTS_ENABLED
                if (((Byte *)pTargaHeader)[0] == 'B' && ((Byte *)pTargaHeader)[1] == 'M')
                {
                    assert(!"This TGA's header looks like a BMP!");             //  look at the first two bytes and see if they are 'BM'
                    // if so it's a BMP not a TGA
                }
                else
                {
                    Byte *pColorMapType = NULL;
                    switch (TargaHeader.ColorMapType)
                    {
                    case 0:
                        pColorMapType = "RGB Color Map";
                        break;

                    case 1:
                        pColorMapType = "Palette Color Map";
                        break;

                    default:
                        pColorMapType = "<Illegal Color Map>";
                        break;
                    }
                    Byte *pImageType = NULL;
                    switch (TargaHeader.ImageType)
                    {
                    case 1:
                        pImageType = "Palette Image Type";
                        break;

                    case 2:
                        pImageType = "RGB Image Type";
                        break;

                    case 3:
                        pImageType = "mono Image Type";
                        break;

                    case 9:
                        pImageType = "RLE Palette Image Type";
                        break;

                    case 10:
                        pImageType = "RLE RGB Image Type";
                        break;

                    case 11:
                        pImageType = "RLE mono Image Type";
                        break;

                    default:
                        pImageType = "<Illegal Image Type>";
                        break;
                    }
                    int      ColorDepth = TargaHeader.BPP;
                    CJString ErrorString;
                    ErrorString.Format("Image type %s %s (%u bpp) not supported!", pColorMapType, pImageType, ColorDepth);
                    ShowSystemMessage("TGA File IO Error", ErrorString.GetBytePtr());
                }
#endif // ASSERTS_ENABLED
                return(false);
            }

            return(true);
        }