Example #1
0
        /// <summary>
        /// Called internally by the serializer when the image content is to be embedded into the JSON document.
        /// </summary>
        internal void _WriteToInternal()
        {
            if (_SatelliteImageContent == null)
            {
                _WriteAsBufferView(); return;
            }

            var imimg = new Memory.InMemoryImage(_SatelliteImageContent);

            _mimeType = imimg.MimeType;
            _uri      = imimg.ToMime64();
        }
Example #2
0
        private static IReadOnlyDictionary <Material, string> _WriteMaterials(IDictionary <String, BYTES> files, string baseName, IEnumerable <Material> materials)
        {
            // write all image files
            var images = materials
                         .Select(item => item.DiffuseTexture)
                         .Where(item => item.Array != null)
                         .Distinct(new _ArraySegmentEqualityComparer <Byte>());

            bool firstImg = true;

            foreach (var img in images)
            {
                var imimg = new Memory.InMemoryImage(img);

                var imgName = firstImg ? baseName : $"{baseName}_{files.Count}.{imimg.FileExtension}";

                files[imgName] = img;

                firstImg = false;
            }

            // write materials

            var mmap = new Dictionary <Material, string>();

            var sb = new StringBuilder();

            foreach (var m in materials)
            {
                mmap[m] = $"Material_{mmap.Count}";

                sb.AppendLine($"newmtl {mmap[m]}");
                sb.AppendLine("illum 2");
                sb.AppendLine(Invariant($"Ka {m.DiffuseColor.X} {m.DiffuseColor.Y} {m.DiffuseColor.Z}"));
                sb.AppendLine(Invariant($"Kd {m.DiffuseColor.X} {m.DiffuseColor.Y} {m.DiffuseColor.Z}"));
                sb.AppendLine(Invariant($"Ks {m.SpecularColor.X} {m.SpecularColor.Y} {m.SpecularColor.Z}"));

                if (m.DiffuseTexture.Array != null)
                {
                    var imgName = files.FirstOrDefault(kvp => kvp.Value.SequenceEqual(m.DiffuseTexture)).Key;
                    sb.AppendLine($"map_Kd {imgName}");
                }

                sb.AppendLine();
            }

            // write material library
            _WriteTextContent(files, baseName + ".mtl", sb);

            return(mmap);
        }
Example #3
0
        /// <summary>
        /// Initializes this <see cref="Image"/> with an image stored in a <see cref="Byte"/> array.
        /// </summary>
        /// <param name="content">A <see cref="Byte"/> array containing a PNG or JPEG image.</param>
        public void SetSatelliteContent(Byte[] content)
        {
            Guard.NotNull(content, nameof(content));

            var imimg = new Memory.InMemoryImage(content);

            if (!imimg.IsValid)
            {
                throw new ArgumentException($"{nameof(content)} must be a PNG, JPG, DDS or WEBP image", nameof(content));
            }

            string imageType = imimg.MimeType;

            _DiscardContent();

            this._SatelliteImageContent = content;
        }
Example #4
0
        /// <summary>
        /// Called internally by the serializer when the image content is to be written as an external file
        /// </summary>
        /// <param name="writer">The satellite asset writer</param>
        /// <param name="satelliteUri">A local satellite URI</param>
        internal void _WriteToSatellite(IO.WriteContext writer, string satelliteUri)
        {
            if (_SatelliteImageContent == null)
            {
                _WriteAsBufferView();
                return;
            }

            _mimeType = null;

            var imimg = new Memory.InMemoryImage(_SatelliteImageContent);

            if (!imimg.IsValid)
            {
                throw new InvalidOperationException();
            }

            _uri = System.IO.Path.ChangeExtension(satelliteUri, imimg.FileExtension);
            writer.WriteAllBytesToEnd(_uri, imimg.GetBuffer());
        }