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); }
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)); } }
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)); } }
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); }