コード例 #1
0
ファイル: Tiff_Aux.cs プロジェクト: room-end/catalog
        internal static void fprintf(Stream fd, string format, params object[] list)
        {
            string s = string.Format(CultureInfo.InvariantCulture, format, list);

            byte[] bytes = Latin1Encoding.GetBytes(s);
            fd.Write(bytes, 0, bytes.Length);
        }
コード例 #2
0
        public virtual string GetStringFromBytes(byte[] data, DataCoding dataCoding)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            string result = null;

            switch (dataCoding)
            {
            case DataCoding.ASCII:
                result = System.Text.Encoding.ASCII.GetString(data);
                break;

            case DataCoding.Latin1:
                result = Latin1Encoding.GetString(data);
                break;

            case DataCoding.SMSCDefault:
                result = SMSCDefaultEncoding.GetString(data);
                break;

            case DataCoding.UCS2:
                result = UCS2Encoding.GetString(data);
                break;

            default:
                throw new SmppException(SmppErrorCode.ESME_RUNKNOWNERR, "Unsupported encoding");
            }
            //Since a CString may contain a null terminating charactor
            //Replace all occurences of null charactors
            return(result.Replace("\u0000", ""));
        }
コード例 #3
0
        public virtual byte[] GetBytesFromString(string cStr, DataCoding dataCoding)
        {
            if (cStr == null)
            {
                throw new ArgumentNullException("cStr");
            }
            if (cStr.Length == 0)
            {
                return(new byte[] { 0x00 });
            }
            byte[] bytes = null;
            switch (dataCoding)
            {
            case DataCoding.ASCII:
                bytes = System.Text.Encoding.ASCII.GetBytes(cStr);
                break;

            case DataCoding.Latin1:
                bytes = Latin1Encoding.GetBytes(cStr);
                break;

            case DataCoding.UCS2:
                bytes = UCS2Encoding.GetBytes(cStr);
                break;

            case DataCoding.SMSCDefault:
                bytes = SMSCDefaultEncoding.GetBytes(cStr);
                break;

            default:
                throw new SmppException(SmppErrorCode.ESME_RUNKNOWNERR, "Unsupported encoding");
            }
            return(bytes);
        }
コード例 #4
0
 private bool writeInkNames(ref TiffDirEntry dir)
 {
     dir.tdir_tag  = TiffTag.INKNAMES;
     dir.tdir_type = TiffType.ASCII;
     byte[] bytes = Latin1Encoding.GetBytes(m_dir.td_inknames);
     dir.tdir_count = bytes.Length;
     return(writeByteArray(ref dir, bytes));
 }
コード例 #5
0
        public virtual byte[] GetBytesFromCString(string cStr, DataCoding dataCoding, bool nullTerminated = true)
        {
            if (cStr == null)
            {
                throw new ArgumentNullException("cStr");
            }
            if (cStr.Length == 0)
            {
                return(new byte[] { 0x00 });
            }
            byte[] bytes = null;
            switch (dataCoding)
            {
            case DataCoding.ASCII:
                bytes = System.Text.Encoding.ASCII.GetBytes(cStr);
                break;

            case DataCoding.Latin1:
                bytes = Latin1Encoding.GetBytes(cStr);
                break;

            case DataCoding.UCS2:
                bytes = UCS2Encoding.GetBytes(cStr);
                break;

            case DataCoding.SMSCDefault:
                bytes = SMSCDefaultEncoding.GetBytes(cStr);
                break;

            default:
                throw new SmppException(SmppErrorCode.ESME_RUNKNOWNERR, "Unsupported encoding");
            }
            ByteBuffer buffer;

            if (nullTerminated)
            {
                buffer = new ByteBuffer(bytes, bytes.Length + 1);
                buffer.Append(new byte[] { 0x00 }); //Append a null charactor a the end
            }
            else
            {
                buffer = new ByteBuffer(bytes, bytes.Length);
            }

            return(buffer.ToBytes());
        }
コード例 #6
0
        public virtual string GetCStringFromBytes(byte[] data, DataCoding dataCoding)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (data.Length < 1)
            {
                throw new ArgumentException("Array cannot be empty", "data");
            }
            if (data[data.Length - 1] != 0x00)
            {
                throw new ArgumentException("CString must be terminated with a null charactor", "data");
            }
            if (data.Length == 1)
            {
                return("");
            }                                    //The string is empty if it contains a single null charactor
            string result = null;

            switch (dataCoding)
            {
            case DataCoding.ASCII:
                result = System.Text.Encoding.ASCII.GetString(data);
                break;

            case DataCoding.Latin1:
                result = Latin1Encoding.GetString(data);
                break;

            case DataCoding.SMSCDefault:
                result = SMSCDefaultEncoding.GetString(data);
                break;

            case DataCoding.UCS2:
                result = UCS2Encoding.GetString(data);
                break;

            default:
                throw new SmppException(SmppErrorCode.ESME_RUNKNOWNERR, "Unsupported encoding");
            }
            return(result.Replace("\x00", ""));//Replace the terminating null charactor
        }
コード例 #7
0
        /// <summary>
        /// Fetches an ASCII item from the file.
        /// </summary>
        private int fetchString(TiffDirEntry dir, out string cp)
        {
            byte[] bytes = null;

            if (dir.tdir_count <= 4)
            {
                int l = (int)dir.tdir_offset;
                if ((m_flags & TiffFlags.SWAB) == TiffFlags.SWAB)
                {
                    SwabLong(ref l);
                }

                bytes = new byte[sizeof(int)];
                writeInt(l, bytes, 0);
                cp = Latin1Encoding.GetString(bytes, 0, dir.tdir_count);
                return(1);
            }

            bytes = new byte[dir.tdir_count];
            int res = fetchData(dir, bytes);

            cp = Latin1Encoding.GetString(bytes, 0, dir.tdir_count);
            return(res);
        }
コード例 #8
0
        /// <summary>
        /// Writes tags that are not special cased.
        /// </summary>
        private bool writeNormalTag(ref TiffDirEntry dir, TiffFieldInfo fip)
        {
            short wc = fip.WriteCount;

            dir.tdir_tag   = fip.Tag;
            dir.tdir_type  = fip.Type;
            dir.tdir_count = wc;

            switch (fip.Type)
            {
            case TiffType.SHORT:
            case TiffType.SSHORT:
                if (fip.PassCount)
                {
                    short[] wp;
                    int     wc2;
                    if (wc == TiffFieldInfo.Variable2)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        wc2 = result[0].ToInt();
                        wp  = result[1].ToShortArray();

                        dir.tdir_count = wc2;
                    }
                    else
                    {
                        // Assume TiffFieldInfo.Variable
                        FieldValue[] result = GetField(fip.Tag);
                        wc             = result[0].ToShort();
                        wp             = result[1].ToShortArray();
                        dir.tdir_count = wc;
                    }

                    if (!writeShortArray(ref dir, wp))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (wc == 1)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        short        sv     = result[0].ToShort();
                        dir.tdir_offset = insertData(dir.tdir_type, sv);
                    }
                    else
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        short[]      wp     = result[0].ToShortArray();
                        if (!writeShortArray(ref dir, wp))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TiffType.LONG:
            case TiffType.SLONG:
            case TiffType.IFD:
                if (fip.PassCount)
                {
                    int[] lp;
                    int   wc2;
                    if (wc == TiffFieldInfo.Variable2)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        wc2            = result[0].ToInt();
                        lp             = result[1].ToIntArray();
                        dir.tdir_count = wc2;
                    }
                    else
                    {
                        // Assume TiffFieldInfo.Variable
                        FieldValue[] result = GetField(fip.Tag);
                        wc             = result[0].ToShort();
                        lp             = result[1].ToIntArray();
                        dir.tdir_count = wc;
                    }

                    if (!writeLongArray(ref dir, lp))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (wc == 1)
                    {
                        // XXX handle LONG->SHORT conversion
                        FieldValue[] result = GetField(fip.Tag);
                        dir.tdir_offset = result[0].ToUInt();
                    }
                    else
                    {
                        int[]        lp;
                        FieldValue[] result = GetField(fip.Tag);
                        lp = result[0].ToIntArray();
                        if (!writeLongArray(ref dir, lp))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TiffType.RATIONAL:
            case TiffType.SRATIONAL:
                if (fip.PassCount)
                {
                    float[] fp;
                    int     wc2;
                    if (wc == TiffFieldInfo.Variable2)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        wc2            = result[0].ToInt();
                        fp             = result[1].ToFloatArray();
                        dir.tdir_count = wc2;
                    }
                    else
                    {
                        // Assume TiffFieldInfo.Variable
                        FieldValue[] result = GetField(fip.Tag);
                        wc             = result[0].ToShort();
                        fp             = result[1].ToFloatArray();
                        dir.tdir_count = wc;
                    }

                    if (!writeRationalArray(ref dir, fp))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (wc == 1)
                    {
                        float[]      fv     = new float[1];
                        FieldValue[] result = GetField(fip.Tag);
                        fv[0] = result[0].ToFloat();
                        if (!writeRationalArray(ref dir, fv))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        float[]      fp     = result[0].ToFloatArray();
                        if (!writeRationalArray(ref dir, fp))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TiffType.FLOAT:
                if (fip.PassCount)
                {
                    float[] fp;
                    int     wc2;
                    if (wc == TiffFieldInfo.Variable2)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        wc2            = result[0].ToInt();
                        fp             = result[1].ToFloatArray();
                        dir.tdir_count = wc2;
                    }
                    else
                    {
                        // Assume TiffFieldInfo.Variable
                        FieldValue[] result = GetField(fip.Tag);
                        wc             = result[0].ToShort();
                        fp             = result[1].ToFloatArray();
                        dir.tdir_count = wc;
                    }

                    if (!writeFloatArray(ref dir, fp))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (wc == 1)
                    {
                        float[]      fv     = new float[1];
                        FieldValue[] result = GetField(fip.Tag);
                        fv[0] = result[0].ToFloat();
                        if (!writeFloatArray(ref dir, fv))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        float[]      fp     = result[0].ToFloatArray();
                        if (!writeFloatArray(ref dir, fp))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TiffType.DOUBLE:
                if (fip.PassCount)
                {
                    double[] dp;
                    int      wc2;
                    if (wc == TiffFieldInfo.Variable2)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        wc2            = result[0].ToInt();
                        dp             = result[1].ToDoubleArray();
                        dir.tdir_count = wc2;
                    }
                    else
                    {
                        // Assume TiffFieldInfo.Variable
                        FieldValue[] result = GetField(fip.Tag);
                        wc             = result[0].ToShort();
                        dp             = result[1].ToDoubleArray();
                        dir.tdir_count = wc;
                    }

                    if (!writeDoubleArray(ref dir, dp))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (wc == 1)
                    {
                        double[]     dv     = new double[1];
                        FieldValue[] result = GetField(fip.Tag);
                        dv[0] = result[0].ToDouble();
                        if (!writeDoubleArray(ref dir, dv))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        double[]     dp     = result[0].ToDoubleArray();
                        if (!writeDoubleArray(ref dir, dp))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TiffType.ASCII:
            {
                FieldValue[] result = GetField(fip.Tag);

                string cp;
                if (fip.PassCount)
                {
                    cp = result[1].ToString();
                }
                else
                {
                    cp = result[0].ToString();
                }

                byte[] stringBytes = Latin1Encoding.GetBytes(cp);

                // If this last character is a '\0' null char
                if (stringBytes.Length != 0 && stringBytes[stringBytes.Length - 1] == 0)
                {
                    dir.tdir_count = stringBytes.Length;
                    if (!writeByteArray(ref dir, stringBytes))
                    {
                        return(false);
                    }
                }
                else
                {
                    // add zero ('\0') at the end of the byte array
                    byte[] totalBytes = new byte[stringBytes.Length + 1];
                    Buffer.BlockCopy(stringBytes, 0, totalBytes, 0, stringBytes.Length);

                    dir.tdir_count = totalBytes.Length;
                    if (!writeByteArray(ref dir, totalBytes))
                    {
                        return(false);
                    }
                }
            }
            break;

            case TiffType.BYTE:
            case TiffType.SBYTE:
                if (fip.PassCount)
                {
                    byte[] cp;
                    int    wc2;
                    if (wc == TiffFieldInfo.Variable2)
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        wc2            = result[0].ToInt();
                        cp             = result[1].ToByteArray();
                        dir.tdir_count = wc2;
                    }
                    else
                    {
                        // Assume TiffFieldInfo.Variable
                        FieldValue[] result = GetField(fip.Tag);
                        wc             = result[0].ToShort();
                        cp             = result[1].ToByteArray();
                        dir.tdir_count = wc;
                    }

                    if (!writeByteArray(ref dir, cp))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (wc == 1)
                    {
                        byte[]       cv     = new byte[1];
                        FieldValue[] result = GetField(fip.Tag);
                        cv[0] = result[0].ToByte();
                        if (!writeByteArray(ref dir, cv))
                        {
                            return(false);
                        }
                    }
                    else
                    {
                        FieldValue[] result = GetField(fip.Tag);
                        byte[]       cp     = result[0].ToByteArray();
                        if (!writeByteArray(ref dir, cp))
                        {
                            return(false);
                        }
                    }
                }
                break;

            case TiffType.UNDEFINED:
            {
                byte[] cp;
                int    wc2;
                if (wc == TiffFieldInfo.Variable)
                {
                    FieldValue[] result = GetField(fip.Tag);
                    wc             = result[0].ToShort();
                    cp             = result[1].ToByteArray();
                    dir.tdir_count = wc;
                }
                else if (wc == TiffFieldInfo.Variable2)
                {
                    FieldValue[] result = GetField(fip.Tag);
                    wc2            = result[0].ToInt();
                    cp             = result[1].ToByteArray();
                    dir.tdir_count = wc2;
                }
                else
                {
                    FieldValue[] result = GetField(fip.Tag);
                    cp = result[0].ToByteArray();
                }

                if (!writeByteArray(ref dir, cp))
                {
                    return(false);
                }
            }
            break;

            case TiffType.NOTYPE:
                break;
            }

            return(true);
        }