/// <summary> /// 从文件数据流中读取图形文本扩展(Plain Text Extension) /// </summary> /// <param name="stream"></param> /// <returns></returns> public PlainTextEx GetPlainTextEx(Stream stream) { PlainTextEx pltEx = new PlainTextEx(); int blockSize = Read(); if (blockSize != PlainTextEx.BlockSize) { throw new Exception("数据格式错误!"); } pltEx.XOffSet = ReadShort(); pltEx.YOffSet = ReadShort(); pltEx.Width = ReadShort(); pltEx.Height = ReadShort(); pltEx.CharacterCellWidth = (byte)Read(); pltEx.CharacterCellHeight = (byte)Read(); pltEx.ForegroundColorIndex = (byte)Read(); pltEx.BgColorIndex = (byte)Read(); int nextFlag = Read(); pltEx.TextDatas = new List <string>(); while (nextFlag != 0) { blockSize = nextFlag; string data = ReadString(blockSize); pltEx.TextDatas.Add(data); nextFlag = Read(); } return(pltEx); }
public static GifImage Decode(Stream fs) { StreamHelper streamHelper = null; GifImage gifImage = new GifImage(); List <GraphicEx> graphics = new List <GraphicEx>(); int frameCount = 0; streamHelper = new StreamHelper(fs); gifImage.Header = streamHelper.ReadString(6); gifImage.LogicalScreenDescriptor = streamHelper.GetLCD(fs); if (gifImage.LogicalScreenDescriptor.GlobalColorTableFlag) { gifImage.GlobalColorTable = streamHelper.ReadByte(gifImage.LogicalScreenDescriptor.GlobalColorTableSize * 3); } int nextFlag = streamHelper.Read(); while (nextFlag != 0) { if (nextFlag == GifExtensions.ImageLabel) { ReadImage(streamHelper, fs, gifImage, graphics, frameCount); frameCount++; } else if (nextFlag == GifExtensions.ExtensionIntroducer) { int gcl = streamHelper.Read(); switch (gcl) { case GifExtensions.GraphicControlLabel: { GraphicEx graphicEx = streamHelper.GetGraphicControlExtension(fs); graphics.Add(graphicEx); break; } case GifExtensions.CommentLabel: { CommentEx comment = streamHelper.GetCommentEx(fs); gifImage.CommentExtensions.Add(comment); break; } case GifExtensions.ApplicationExtensionLabel: { ApplicationEx applicationEx = streamHelper.GetApplicationEx(fs); gifImage.ApplictionExtensions.Add(applicationEx); break; } case GifExtensions.PlainTextLabel: { PlainTextEx textEx = streamHelper.GetPlainTextEx(fs); gifImage.PlainTextEntensions.Add(textEx); break; } } } else if (nextFlag == GifExtensions.EndIntroducer) { break; } nextFlag = streamHelper.Read(); } return(gifImage); }