コード例 #1
0
        public bool Save2File(CRenderContext rc, string fileName, EIMAGE_FILE_FORMAT Type)
        {
            unsafe
            {
                Support.CBlobObject data = new Support.CBlobObject();
                Save2Memory(rc, data, EIMAGE_FILE_FORMAT.BMP);

                return(Save2File(fileName, data, Type));
            }
            //return (bool)SDK_IShaderResourceView_Save2File(CoreObject, rc.CoreObject, fileName, Type);
        }
コード例 #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));
            }
        }
コード例 #4
0
        public static bool Save2File(string fileName, int width, int height, int stride, byte[] tagBytes, EIMAGE_FILE_FORMAT format)
        {
            unsafe
            {
                fixed(byte *tagData = &tagBytes[0])
                {
                    var bmp = new System.Drawing.Bitmap(width, height, stride, System.Drawing.Imaging.PixelFormat.Format32bppArgb, (IntPtr)tagData);
                    var fmt = System.Drawing.Imaging.ImageFormat.Bmp;

                    switch (format)
                    {
                    case EIMAGE_FILE_FORMAT.BMP:
                        fmt = System.Drawing.Imaging.ImageFormat.Bmp;
                        break;

                    case EIMAGE_FILE_FORMAT.DDS:
                        throw new InvalidOperationException();

                    case EIMAGE_FILE_FORMAT.GIF:
                        fmt = System.Drawing.Imaging.ImageFormat.Gif;
                        break;

                    case EIMAGE_FILE_FORMAT.JPG:
                        fmt = System.Drawing.Imaging.ImageFormat.Jpeg;
                        break;

                    case EIMAGE_FILE_FORMAT.PNG:
                        fmt = System.Drawing.Imaging.ImageFormat.Png;
                        break;

                    case EIMAGE_FILE_FORMAT.TIFF:
                        fmt = System.Drawing.Imaging.ImageFormat.Tiff;
                        break;

                    default:
                        throw new InvalidOperationException();
                    }
                    //var bmpData = bmp.LockBits(new System.Drawing.Rectangle(0, 0, desc->Width, desc->Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
                    //System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, tagBytes, 0, desc->Stride * desc->Height);
                    //bmp.UnlockBits(bmpData);
                    bmp.Save(fileName, fmt);
                }
            }
            return(true);
        }