public static void Encode(string fileName, FarbfeldImageData imageData) { if (string.IsNullOrEmpty(fileName)) { throw new ArgumentNullException(nameof(fileName)); } if (imageData == null) { throw new ArgumentNullException(nameof(imageData)); } using (Stream stream = File.Create(fileName)) { Encode(stream, imageData); } }
public static void Encode(Stream stream, FarbfeldImageData imageData) { if (stream == null) { throw new ArgumentNullException(nameof(imageData)); } if (imageData == null) { throw new ArgumentNullException(nameof(imageData)); } ushort[] data; byte[] header; byte[] buffer; int width; int height; int rowLength; int dataIndex; width = imageData.Width; height = imageData.Height; data = imageData.GetData(); rowLength = width * Farbfeld.PixelDataLength; dataIndex = 0; header = new byte[8]; header[0] = (byte)'f'; header[1] = (byte)'a'; header[2] = (byte)'r'; header[3] = (byte)'b'; header[4] = (byte)'f'; header[5] = (byte)'e'; header[6] = (byte)'l'; header[7] = (byte)'d'; stream.Write(header, 0, 8); stream.WriteBigEndian(width); stream.WriteBigEndian(height); buffer = new byte[rowLength]; for (int row = 0; row < height; row++) { for (int col = 0; col < width; col++) { int index; ushort r; ushort g; ushort b; ushort a; index = col * Farbfeld.PixelDataLength; r = data[dataIndex]; g = data[dataIndex + 1]; b = data[dataIndex + 2]; a = data[dataIndex + 3]; buffer[index] = (byte)(r >> 8); buffer[index + 1] = (byte)r; buffer[index + 2] = (byte)(g >> 8); buffer[index + 3] = (byte)g; buffer[index + 4] = (byte)(b >> 8); buffer[index + 5] = (byte)b; buffer[index + 6] = (byte)(a >> 8); buffer[index + 7] = (byte)a; dataIndex += 4; } stream.Write(buffer, 0, rowLength); } }