コード例 #1
0
ファイル: Quaternionf.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Quaternionf"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Quaternionf quaternion)
 {
     writer.Write(quaternion.A);
     writer.Write(quaternion.B);
     writer.Write(quaternion.C);
     writer.Write(quaternion.D);
 }
コード例 #2
0
        private long WriteDeveloper(Ibasa.IO.BinaryWriter writer)
        {
            if (DeveloperArea.Count == 0)
            {
                return(0);
            }

            long[] offsets = new long[DeveloperArea.Count];

            for (int i = 0; i < DeveloperArea.Count; ++i)
            {
                offsets[i] = writer.BaseStream.Position;
                writer.Write(DeveloperArea[i].Value);
            }

            long developerOffset = writer.BaseStream.Position;

            writer.Write((ushort)DeveloperArea.Count);
            for (int i = 0; i < DeveloperArea.Count; ++i)
            {
                writer.Write((ushort)DeveloperArea[i].Key);
                writer.Write((uint)offsets[i]);
                writer.Write((uint)DeveloperArea[i].Value.Length);
            }
            return(developerOffset);
        }
コード例 #3
0
 /// <summary>
 /// Writes the given <see cref="Ellipsei"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Ellipsei ellipse)
 {
     writer.Write(ellipse.X);
     writer.Write(ellipse.Y);
     writer.Write(ellipse.Width);
     writer.Write(ellipse.Height);
 }
コード例 #4
0
ファイル: Rectangled.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Rectangled"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Rectangled rectangle)
 {
     writer.Write(rectangle.X);
     writer.Write(rectangle.Y);
     writer.Write(rectangle.Width);
     writer.Write(rectangle.Height);
 }
コード例 #5
0
        private void WriteData24(Ibasa.IO.BinaryWriter writer, Resource resource, bool flip)
        {
            byte[] data = resource[0, 0];

            for (int i = 0; i < data.Length; i += 3)
            {
                byte r, g, b;
                if (flip)
                {
                    r = data[i + 0];
                    g = data[i + 1];
                    b = data[i + 2];
                }
                else
                {
                    b = data[i + 0];
                    g = data[i + 1];
                    r = data[i + 2];
                }

                writer.Write(b);
                writer.Write(g);
                writer.Write(r);
            }
        }
コード例 #6
0
 /// <summary>
 /// Writes the given <see cref="Spherel"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Spherel sphere)
 {
     writer.Write(sphere.X);
     writer.Write(sphere.Y);
     writer.Write(sphere.Z);
     writer.Write(sphere.Radius);
 }
コード例 #7
0
        private void WriteHeader(Ibasa.IO.BinaryWriter writer)
        {
            int depth = 0;
            int type  = 0;

            if (Image.Format is SharpIL.Formats.B8G8R8UNorm || Image.Format is SharpIL.Formats.R8G8B8UNorm)
            {
                depth = 24;
                type  = 2; //uncompressed true color
            }
            if (Image.Format is SharpIL.Formats.B8G8R8A8UNorm || Image.Format is SharpIL.Formats.R8G8B8A8UNorm)
            {
                depth = 32;
                type  = 2; //uncompressed true color
            }
            if (Image.Format is SharpIL.Formats.R8UNorm || Image.Format is SharpIL.Formats.A8UNorm)
            {
                depth = 8;
                type  = 3; //uncompressed bw
            }

            writer.Write((byte)Header.ImageId.Length);
            writer.Write((byte)0);   //no color map
            writer.Write((byte)type);
            writer.Write((ushort)0); //ColourMapOrigin
            writer.Write((ushort)0); //ColorMapLength
            writer.Write((byte)0);   //ColorMapDepth
            writer.Write((ushort)0); //XOrigin
            writer.Write((ushort)0); //YOrigin
            writer.Write((ushort)ImageData.Size.Width);
            writer.Write((ushort)ImageData.Size.Height);
            writer.Write((byte)depth);
            writer.Write((byte)0);
            writer.Write(Header.ImageId);
        }
コード例 #8
0
ファイル: Planed.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Planed"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Planed plane)
 {
     writer.Write(plane.Normal.X);
     writer.Write(plane.Normal.Y);
     writer.Write(plane.Normal.Z);
     writer.Write(plane.D);
 }
コード例 #9
0
        private void WriteFooter(Ibasa.IO.BinaryWriter writer)
        {
            long developerOffset = WriteDeveloper(writer);
            long extensionOffset = WriteExtension(writer);

            writer.Write((uint)extensionOffset);
            writer.Write((uint)developerOffset);
            writer.Write(System.Text.Encoding.ASCII.GetBytes("TRUEVISION-XFILE.\0"));
        }
コード例 #10
0
 /// <summary>
 /// Writes the given <see cref="Boxf"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Boxf box)
 {
     writer.Write(box.X);
     writer.Write(box.Y);
     writer.Write(box.Z);
     writer.Write(box.Width);
     writer.Write(box.Height);
     writer.Write(box.Depth);
 }
コード例 #11
0
		/// <summary>
		/// Writes the given <see cref="Polygon2i"/> to an <see cref="Ibasa.IO.BinaryWriter">.
		/// </summary>
		public static void Write(this Ibasa.IO.BinaryWriter writer, Polygon2i polygon)
		{
			var array = polygon.ToArray();
			writer.Write(array.Length);
			foreach(var point in array)
			{
				writer.Write(point);
			}
		}
コード例 #12
0
        public void Save(Stream stream)
        {
            var writer = new Ibasa.IO.BinaryWriter(stream, System.Text.Encoding.ASCII);

            WriteHeader(writer);
            //WriteColorMap(writer); dont use color maps
            WriteData(writer, ImageData);
            WriteFooter(writer);
        }
コード例 #13
0
 /// <summary>
 /// Writes the given <see cref="Vector8l"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Vector8l vector)
 {
     writer.Write(vector.V0);
     writer.Write(vector.V1);
     writer.Write(vector.V2);
     writer.Write(vector.V3);
     writer.Write(vector.V4);
     writer.Write(vector.V5);
     writer.Write(vector.V6);
     writer.Write(vector.V7);
 }
コード例 #14
0
ファイル: DirectDrawSurface.cs プロジェクト: bonomali/Ibasa
        public void Save(Stream stream)
        {
            var writer = new Ibasa.IO.BinaryWriter(stream, System.Text.Encoding.ASCII);

            writer.Write((int)new FourCC("DDS "));
            writer.Write(124);

            SetInternalState();
            WriteHeader(writer);
            WriteDx10Header(writer);
            WriteData(writer);
        }
コード例 #15
0
ファイル: DirectDrawSurface.cs プロジェクト: bonomali/Ibasa
        private void WriteDx10Header(Ibasa.IO.BinaryWriter writer)
        {
            if (!IsDX10Mode)
            {
                return;
            }

            writer.Write((int)DxgiFormat);
            writer.Write((int)ResourceDimension);
            writer.Write((int)MiscFlags);
            writer.Write(ArraySize);
            writer.Write(new byte[4]); //write padding
        }
コード例 #16
0
 private void WriteData(Ibasa.IO.BinaryWriter writer, Resource resource)
 {
     if (Image.Format is SharpIL.Formats.B8G8R8UNorm)
     {
         WriteData24(writer, resource, false);
     }
     if (Image.Format is SharpIL.Formats.R8G8B8UNorm)
     {
         WriteData24(writer, resource, true);
     }
     if (Image.Format is SharpIL.Formats.B8G8R8A8UNorm)
     {
         WriteData32(writer, resource, false);
     }
     if (Image.Format is SharpIL.Formats.R8G8B8A8UNorm)
     {
         WriteData32(writer, resource, true);
     }
     if (Image.Format is SharpIL.Formats.R8UNorm || Image.Format is SharpIL.Formats.A8UNorm)
     {
         WriteData8(writer, resource);
     }
 }
コード例 #17
0
ファイル: DirectDrawSurface.cs プロジェクト: bonomali/Ibasa
        private void WriteHeader(Ibasa.IO.BinaryWriter writer)
        {
            writer.Write((int)HeaderFlags);
            writer.Write(Height);
            writer.Write(Width);
            writer.Write(Pitch);
            writer.Write(Depth);
            writer.Write(MipmapCount);
            writer.Write(new byte[44]); //write padding

            writer.Write(32);
            writer.Write((int)PixelFlags);
            writer.Write((int)FourCC);
            writer.Write(RGBBitCount);
            writer.Write(RBitMask);
            writer.Write(GBitMask);
            writer.Write(BBitMask);
            writer.Write(ABitMask);

            writer.Write((int)SurfaceFlags);
            writer.Write((int)CubemapFlags);
            writer.Write(new byte[12]); //write padding
        }
コード例 #18
0
ファイル: DirectDrawSurface.cs プロジェクト: bonomali/Ibasa
 private void WriteData(Ibasa.IO.BinaryWriter writer)
 {
     if (IsDX10Mode)
     {
         for (int arraySlice = 0; arraySlice < Image.ArraySize; ++arraySlice)
         {
             for (int mipSlice = 0; mipSlice < Image.MipLevels; ++mipSlice)
             {
                 byte[] subresource = Image[mipSlice, arraySlice];
                 writer.Write(subresource);
             }
         }
     }
     else if (PixelFlags.HasFlag(PixelFlagsEnum.FourCC))
     {
         for (int arraySlice = 0; arraySlice < Image.ArraySize; ++arraySlice)
         {
             for (int mipSlice = 0; mipSlice < Image.MipLevels; ++mipSlice)
             {
                 byte[] subresource = Image[mipSlice, arraySlice];
                 writer.Write(subresource);
             }
         }
     }
     else
     {
         for (int arraySlice = 0; arraySlice < Image.ArraySize; ++arraySlice)
         {
             for (int mipSlice = 0; mipSlice < Image.MipLevels; ++mipSlice)
             {
                 byte[] subresource = Image[mipSlice, arraySlice];
                 writer.Write(subresource);
             }
         }
     }
 }
コード例 #19
0
 /// <summary>
 /// Writes the given <see cref="Vector2sb"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Vector2sb vector)
 {
     writer.Write(vector.X);
     writer.Write(vector.Y);
 }
コード例 #20
0
ファイル: DirectDrawSurface.cs プロジェクト: Frassle/Ibasa
        public void Save(Stream stream)
        {
            var writer = new Ibasa.IO.BinaryWriter(stream, System.Text.Encoding.ASCII);
            
            writer.Write((int)new FourCC("DDS "));
            writer.Write(124);

            SetInternalState();
            WriteHeader(writer);
            WriteDx10Header(writer);
            WriteData(writer);
        }
コード例 #21
0
 private void WriteData8(Ibasa.IO.BinaryWriter writer, Resource resource)
 {
     writer.Write(resource[0, 0]);
 }
コード例 #22
0
ファイル: Half.cs プロジェクト: bonomali/Ibasa
 public static void Write(this Ibasa.IO.BinaryWriter writer, Half half)
 {
     writer.Write(Half.HalfToInt16Bits(half));
 }
コード例 #23
0
ファイル: Rayd.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Rayd"/> to a Ibasa.IO.BinaryWriter.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Rayd ray)
 {
     Point.Write(writer, ray.Position);
     Vector.Write(writer, ray.Direction);
 }
コード例 #24
0
ファイル: Linel.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Linel"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Linel line)
 {
     writer.Write(line.Start);
     writer.Write(line.End);
 }
コード例 #25
0
        private long WriteExtension(Ibasa.IO.BinaryWriter writer)
        {
            if (Extension.AllDefault)
            {
                return(0);
            }

            long colorCorrectionOffset = 0;

            //write color correction
            if (Extension.ColorCorrection != null)
            {
                colorCorrectionOffset = writer.BaseStream.Position;

                for (int i = 0; i < 256; ++i)
                {
                    writer.Write((ushort)Extension.ColorCorrection[i].W);
                    writer.Write((ushort)Extension.ColorCorrection[i].X);
                    writer.Write((ushort)Extension.ColorCorrection[i].Y);
                    writer.Write((ushort)Extension.ColorCorrection[i].Z);
                }
            }
            long scanLineOffset = 0;

            //read scan lines
            if (Extension.ScanLines != null)
            {
                scanLineOffset = writer.BaseStream.Position;
                for (int i = 0; i < Extension.ScanLines.Length; ++i)
                {
                    writer.Write((uint)Extension.ScanLines[i]);
                }
            }
            long postageStampOffset = 0;

            //read postage stamp
            if (Extension.PostageStamp != null)
            {
                postageStampOffset = writer.BaseStream.Position;

                writer.Write((byte)Extension.PostageStamp.Size.Width);
                writer.Write((byte)Extension.PostageStamp.Size.Height);
                WriteData(writer, Extension.PostageStamp);
            }

            long extensionOffset = writer.BaseStream.Position;

            writer.Write((ushort)495); //extension size
            writer.Write(Extension.AuthorName ?? new byte[41]);
            writer.Write(Extension.AuthorComments ?? new byte[324]);
            writer.Write((ushort)Extension.DateTimeStampMonth);
            writer.Write((ushort)Extension.DateTimeStampDay);
            writer.Write((ushort)Extension.DateTimeStampYear);
            writer.Write((ushort)Extension.DateTimeStampHour);
            writer.Write((ushort)Extension.DateTimeStampMinute);
            writer.Write((ushort)Extension.DateTimeStampSecond);
            writer.Write(Extension.JobId ?? new byte[41]);
            writer.Write((ushort)Extension.JobTimeHours);
            writer.Write((ushort)Extension.JobTimeMinutes);
            writer.Write((ushort)Extension.JobTimeSeconds);
            writer.Write(Extension.SoftwareId ?? new byte[41]);
            writer.Write((ushort)Extension.SoftwareVersionNumber);
            writer.Write((byte)Extension.SoftwareVersionLetter);
            writer.Write((uint)Extension.KeyColor);
            writer.Write((ushort)Extension.PixelAspectRatioN);
            writer.Write((ushort)Extension.PixelAspectRatioD);
            writer.Write((ushort)Extension.GammaValueN);
            writer.Write((ushort)Extension.GammaValueD);
            writer.Write((uint)colorCorrectionOffset);
            writer.Write((uint)postageStampOffset);
            writer.Write((uint)scanLineOffset);
            writer.Write((byte)Extension.Attributes);

            return(extensionOffset);
        }
コード例 #26
0
ファイル: Circlef.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Circlef"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Circlef circle)
 {
     writer.Write(circle.X);
     writer.Write(circle.Y);
     writer.Write(circle.Radius);
 }
コード例 #27
0
ファイル: Point2d.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Point2d"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Point2d point)
 {
     writer.Write(point.X);
     writer.Write(point.Y);
 }
コード例 #28
0
ファイル: Size2i.cs プロジェクト: bonomali/Ibasa
 /// <summary>
 /// Writes the given <see cref="Size2i"/> to an <see cref="Ibasa.IO.BinaryWriter">.
 /// </summary>
 public static void Write(this Ibasa.IO.BinaryWriter writer, Size2i size)
 {
     writer.Write(size.Width);
     writer.Write(size.Height);
 }