Beispiel #1
0
        /// <summary>
        ///  PNG画像のバイト配列からmeta情報を書き込んだバイト配列を作成します。
        /// </summary>
        /// <param name="image">バイト配列</param>
        /// <param name="vrcMetaData">meta情報</param>
        /// <returns>meta情報を書き込んだバイト配列</returns>
        public static byte[] Write(ReadOnlySpan <byte> image, VrcMetaData vrcMetaData)
        {
            if (image == null)
            {
                throw new ArgumentNullException(nameof(vrcMetaData));
            }

            if (vrcMetaData == null)
            {
                throw new ArgumentNullException(nameof(vrcMetaData));
            }

            var chunks = ChunkReader.SplitChunks(image);

            // 既存のmeta情報を削除
            foreach (var chunk in chunks.Where(c => VrcMetaChunk.IsVrcMetaChunk(c.TypePart)).ToArray())
            {
                chunks.Remove(chunk);
            }

            // 受け取ったmeta情報を末尾に追加
            chunks.Insert(chunks.Count - 1, new Chunk(VrcMetaChunk.ConvertToString(VrcMetaChunk.DateChunk), vrcMetaData.Date?.ToString("yyyyMMddHHmmssfff", new CultureInfo("en", false))));
            chunks.Insert(chunks.Count - 1, new Chunk(VrcMetaChunk.ConvertToString(VrcMetaChunk.WorldChunk), vrcMetaData.World));
            chunks.Insert(chunks.Count - 1, new Chunk(VrcMetaChunk.ConvertToString(VrcMetaChunk.PhotographerChunk), vrcMetaData.Photographer));

            foreach (var user in vrcMetaData.Users)
            {
                chunks.Insert(chunks.Count - 1, new Chunk(VrcMetaChunk.ConvertToString(VrcMetaChunk.UserChunk), user.ToString()));
            }

            return(ChunkWriter.WriteImageBytes(chunks.ToArray()));
        }
Beispiel #2
0
        /// <summary>
        ///  PNG画像のバイト配列からmeta情報を書き込んだバイト配列を作成します。
        /// </summary>
        /// <param name="image">バイト配列</param>
        /// <param name="vrcMetaData">meta情報</param>
        /// <returns>meta情報を書き込んだバイト配列</returns>
        public static byte[] Write(string path, VrcMetaData vrcMetaData)
        {
            if (path == null)
            {
                throw new ArgumentNullException(nameof(path));
            }

            if (!File.Exists(path))
            {
                throw new FileNotFoundException(path);
            }

            if (vrcMetaData == null)
            {
                throw new ArgumentNullException(nameof(vrcMetaData));
            }

            return(Write(File.ReadAllBytes(path), vrcMetaData));
        }