private void WriteColorTable(MemoryStream sourceImage) { sourceImage.Position = 13; var header = new byte[768]; sourceImage.Read(header, 0, header.Length); GifStream.Write(header, 0, header.Length); }
private void GenerateHeader(MemoryStream firstFrame) { firstFrame.Position = 0; var header = new byte[781]; // Header Block + Logical Screen Descriptor + max Global Color Table size firstFrame.Read(header, 0, header.Length); GifStream.Write(header, 0, header.Length); }
public HttpResponseMessage Get() { var response = Request.CreateResponse(); GifStream gifStream = new GifStream(new GameGenerator(), 1000, false); Action <Stream, HttpContent, TransportContext> writeToStream = gifStream.WriteToStream; response.Content = new PushStreamContent(writeToStream, new MediaTypeHeaderValue("image/gif")); return(response); }
public HttpResponseMessage Get(string timeZone = "Central Standard Time") { var response = Request.CreateResponse(); GifStream gifStream = new GifStream(new ClockGenerator(timeZone), 1000, false); Action <Stream, HttpContent, TransportContext> writeToStream = gifStream.WriteToStream; response.Content = new PushStreamContent(writeToStream, new MediaTypeHeaderValue("image/gif")); return(response); }
public async Task AddFrame(Image frame, int x, int y) { using (var sourceImage = new MemoryStream()) { frame.Save(sourceImage, ImageFormat.Gif); if (FirstFrame) { GenerateHeader(sourceImage); FirstFrame = false; } sourceImage.Position = 789; //Position of the Image Descriptor var header = new byte[11]; sourceImage.Read(header, 0, header.Length); WriteByte(header[0]); WriteShort(x); WriteShort(y); WriteShort(frame.Width); WriteShort(frame.Height); if (UseLocalColorTable) { sourceImage.Position = 10; WriteByte(sourceImage.ReadByte() & 0x3f | 0x80); WriteColorTable(sourceImage); } else { WriteByte(header[9] & 0x07 | 0x07); } WriteByte(header[10]); //LZW Minimum Code Size // Read image data sourceImage.Position = 800; var dataLength = sourceImage.ReadByte(); while (dataLength > 0) { var imgData = new byte[dataLength]; sourceImage.Read(imgData, 0, dataLength); GifStream.WriteByte(Convert.ToByte(dataLength)); await GifStream.WriteAsync(imgData, 0, dataLength); dataLength = sourceImage.ReadByte(); } GifStream.WriteByte(0); } }
private void WriteByte(int value) { GifStream.WriteByte(Convert.ToByte(value)); }
private async Task WriteString(string value) { await GifStream.WriteAsync(value.ToArray().Select(c => (byte)c).ToArray(), 0, value.Length); }
private void WriteShort(int value) { GifStream.WriteByte(Convert.ToByte(value & 0xff)); GifStream.WriteByte(Convert.ToByte((value >> 8) & 0xff)); }