示例#1
0
        public static void SaveSnap(string fileName, Support.CBlobObject[] dataArray)
        {
            var xnd = EngineNS.IO.XndHolder.NewXNDHolder();

            EngineNS.IO.XndNode node = xnd.Node;
            for (int k = 0; k < dataArray.Length; k++)
            {
                var data = dataArray[k];
                var attr = node.AddAttrib($"Frame{k}");

                unsafe
                {
                    var        dataPtr = (byte *)data.Data.ToPointer();
                    PixelDesc *desc    = (PixelDesc *)dataPtr;

                    var descSize = sizeof(PixelDesc);

                    var srcBytes = data.ToBytes();
                    var tagBytes = new byte[srcBytes.Length - descSize];
                    for (int i = 0; i < tagBytes.Length; i += 4)
                    {
                        // bgra         rgba
                        tagBytes[i]     = srcBytes[i + 2 + descSize];
                        tagBytes[i + 1] = srcBytes[i + 1 + descSize];
                        tagBytes[i + 2] = srcBytes[i + descSize];
                        tagBytes[i + 3] = srcBytes[i + 3 + descSize];
                    }

                    fixed(byte *tagData = &tagBytes[0])
                    {
                        var bitmap    = new System.Drawing.Bitmap(desc->Width, desc->Height, desc->Stride, System.Drawing.Imaging.PixelFormat.Format32bppArgb, (IntPtr)tagData);
                        var memStream = new System.IO.MemoryStream();

                        bitmap.Save(memStream, System.Drawing.Imaging.ImageFormat.Png);

                        attr.BeginWrite();
                        var memArray = memStream.ToArray();

                        attr.Write(memArray, memArray.Length);
                        attr.EndWrite();
                    }
                }
            }
            var tmp = fileName + ".tmp";

            EngineNS.IO.XndHolder.SaveXND(tmp, xnd);
            CEngine.Instance.FileManager.MoveFile(tmp, fileName);
        }
示例#2
0
        public bool Save2File4x4(string fileName, Support.CBlobObject[] dataArray, EIMAGE_FILE_FORMAT format)
        {
            unsafe
            {
                var        data    = dataArray[0];
                var        dataPtr = (byte *)data.Data.ToPointer();
                PixelDesc *desc    = (PixelDesc *)dataPtr;

                var descSize = sizeof(PixelDesc);

                int imageW      = desc->Width * 4;
                int imageH      = desc->Height * 4;
                int imageStride = imageW * 4;
                var tagBytes    = new byte[imageW * imageH * 4];
                for (int k = 0; k < 16; k++)
                {
                    data    = dataArray[k];
                    dataPtr = (byte *)data.Data.ToPointer();

                    int x = k % 4;
                    int y = k / 4;

                    var srcBytes = data.ToBytes();
                    int startX   = x * desc->Stride;
                    for (int i = 0; i < desc->Height; i++)
                    {
                        int startY = (y * desc->Height + i) * imageStride;
                        for (int j = 0; j < desc->Width; j++)
                        {
                            tagBytes[startY + startX + j * 4 + 0] = srcBytes[descSize + (i * desc->Width + j) * 4 + 2];
                            tagBytes[startY + startX + j * 4 + 1] = srcBytes[descSize + (i * desc->Width + j) * 4 + 1];
                            tagBytes[startY + startX + j * 4 + 2] = srcBytes[descSize + (i * desc->Width + j) * 4 + 0];
                            tagBytes[startY + startX + j * 4 + 3] = srcBytes[descSize + (i * desc->Width + j) * 4 + 3];
                        }
                        //// bgra         rgba
                        //tagBytes[i] = srcBytes[i + 2 + descSize];
                        //tagBytes[i + 1] = srcBytes[i + 1 + descSize];
                        //tagBytes[i + 2] = srcBytes[i + descSize];
                        //tagBytes[i + 3] = srcBytes[i + 3 + descSize];
                    }
                }
                return(Save2File(fileName, desc->Width * 4, desc->Height * 4, desc->Stride * 4, tagBytes, format));
            }
        }
示例#3
0
        public bool Save2File(string fileName, Support.CBlobObject data, EIMAGE_FILE_FORMAT format)
        {
            unsafe
            {
                var        dataPtr = (byte *)data.Data.ToPointer();
                PixelDesc *desc    = (PixelDesc *)dataPtr;

                var descSize = sizeof(PixelDesc);

                var srcBytes = data.ToBytes();
                var tagBytes = new byte[srcBytes.Length - descSize];
                for (int i = 0; i < tagBytes.Length; i += 4)
                {
                    // bgra         rgba
                    tagBytes[i]     = srcBytes[i + 2 + descSize];
                    tagBytes[i + 1] = srcBytes[i + 1 + descSize];
                    tagBytes[i + 2] = srcBytes[i + descSize];
                    tagBytes[i + 3] = srcBytes[i + 3 + descSize];
                }

                return(Save2File(fileName, desc->Width, desc->Height, desc->Stride, tagBytes, format));
            }
        }