/// <summary> /// Loads the avatar file asynchronously. /// </summary> /// <param name="code">Avatar unique code.</param> /// <param name="file">File type (e.g. head texture).</param> public static AsyncRequest <byte[]> LoadAvatarFileAsync(string code, AvatarFile file) { try { var filename = AvatarSdkMgr.Storage().GetAvatarFilename(code, file); return(LoadFileAsync(filename)); } catch (Exception ex) { Debug.LogException(ex); var request = new AsyncRequest <byte[]> (); request.SetError(string.Format("Could not load {0}, reason: {1}", file, ex.Message)); return(request); } }
/// <summary> /// Converts avatar mesh from ply to obj format /// </summary> public static void AvatarPlyToObj(string avatarId, AvatarFile avatarMesh, AvatarFile avatarTexture, string objFile) { var plyFile = AvatarSdkMgr.Storage().GetAvatarFilename(avatarId, avatarMesh); var srcTextureFile = AvatarSdkMgr.Storage().GetAvatarFilename(avatarId, avatarTexture); var dstTextureFile = Path.Combine(Path.GetDirectoryName(objFile), Path.GetFileNameWithoutExtension(objFile) + ".jpg"); var returnCode = CreateMeshConverter().ConvertPlyModelToObj(plyFile, null, objFile, dstTextureFile); if (returnCode != 0) { Debug.LogErrorFormat("Unable convert avatar to obj. Error code: {0}", returnCode); return; } if (File.Exists(dstTextureFile)) { File.Delete(dstTextureFile); } File.Copy(srcTextureFile, dstTextureFile); }
public abstract string GetAvatarFilename(string avatarCode, AvatarFile file);
public override string GetAvatarFilename(string avatarCode, AvatarFile file) { return(Path.Combine(GetAvatarDirectory(avatarCode), AvatarFilenames [file])); }
// POST api/<controller> public void Post([FromBody] AvatarFile file) { var projectDir = AppDomain.CurrentDomain.BaseDirectory.Replace('\\', '/'); projectDir += "assets/img/avatars/"; string[] nums = file.Buffer.Trim().Split(','); byte[] buffer = new byte[nums.Length]; for (int i = 0; i < nums.Length; i++) { buffer[i] = Convert.ToByte(nums[i]); } Image img; using (var bs = new MemoryStream(buffer)) { img = Image.FromStream(bs); } var f = File.Create(projectDir + file.UserId.ToString() + ".jpg"); try { f.Write(buffer, 0, buffer.Length); f.Flush(); } catch (Exception e) { var se = e.ToString(); } f.Close(); f.Dispose(); //int pixLenOst = buffer.Length % 3; //int pixelsLen = buffer.Length/3; //byte[][] pixels = new byte[buffer.Length/3][]; //for (int i = 0; i < pixelsLen-pixLenOst; i++) //{ // pixels[i] = new byte[3] { buffer[i*3], buffer[i*3+1], buffer[i*3+2] }; //} //var bitmap = new Bitmap(file.Width, file.Height); //for (int x = 0; x < file.Height; x++) //{ // for (int y = 0; y<file.Width; y++) // { // bitmap.SetPixel(y,x, Color.FromArgb(pixels[x + y][0], pixels[x + y][1], pixels[x + y][2])); // } //} //img = Image.FromHbitmap(bitmap.GetHbitmap()); //var f2 = File.Create("C:/Users/Necromant/Desktop/tests/some.jpg"); //img.Save(f2, System.Drawing.Imaging.ImageFormat.Jpeg); //f2.Flush(); //f2.Close(); //var size = img.Size; }
public EditAvatar(Guid userId, [CanBeNull] AvatarFile avatar) { UserId = userId; Avatar = avatar; }
/// <summary> /// Helper method that automatically generates full path to file from file type and avatar id, and then calls /// SaveFileAsync. /// </summary> /// <param name="bytes">Binary file content.</param> /// <param name="code">Avatar code.</param> /// <param name="file">Avatar file type.</param> public static AsyncRequest <string> SaveAvatarFileAsync(byte[] bytes, string code, AvatarFile file) { try { var filename = AvatarSdkMgr.Storage().GetAvatarFilename(code, file); return(SaveFileAsync(bytes, filename)); } catch (Exception ex) { Debug.LogException(ex); var request = new AsyncRequest <string> (""); request.SetError(string.Format("Could not save {0}, reason: {1}", file, ex.Message)); return(request); } }
/// <summary> /// Delete particular avatar file by type (e.g. zip mesh file after unzip). /// </summary> public static void DeleteAvatarFile(string avatarCode, AvatarFile file) { var path = AvatarSdkMgr.Storage().GetAvatarFilename(avatarCode, file); File.Delete(path); }
public void Post([FromBody] AvatarFile file) { var projectDir = AppDomain.CurrentDomain.BaseDirectory.Replace('\\', '/'); projectDir += "assets/img/avatars/"; string[] nums = file.Buffer.Trim().Split(','); byte[] buffer = new byte[nums.Length]; for (int i = 0; i < nums.Length; i++) { buffer[i] = Convert.ToByte(nums[i]); } Image img, croppedImg, resizedImg; using (var bs = new MemoryStream(buffer)) { img = Image.FromStream(bs); } int hdelta = 0; int wdelta = 0; if (img.Width > img.Height) { wdelta = img.Width - img.Height; } else if (img.Width < img.Height) { hdelta = img.Height - img.Width; } var startPoint = new Point(wdelta / 2, hdelta / 2); var newImgSize = new Size(img.Width - wdelta, img.Height - hdelta); Rectangle cloneRect = new Rectangle(startPoint, newImgSize); croppedImg = cropImage(img, cloneRect); resizedImg = resizeImage(croppedImg, new Size(400, 400)); using (var ms = new MemoryStream()) { resizedImg.Save(ms, ImageFormat.Png); buffer = ms.ToArray(); } var f = File.Create(projectDir + file.UserId.ToString() + ".png"); try { f.Write(buffer, 0, buffer.Length); f.Flush(); } catch (Exception e) { var se = e.ToString(); } f.Close(); f.Dispose(); }