Created
September 14, 2018 13:39
-
-
Save Xonshiz/2eeb4d400486685ba6c5ba10c32f5f98 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
using System.IO; | |
using System.Linq; | |
using System.Net.Http; | |
using System.Text; | |
using System.Threading.Tasks; | |
using Xamarin.Forms; | |
namespace MriFilesConvert | |
{ | |
public partial class MainPage : ContentPage | |
{ | |
byte[] imageContent; | |
public MainPage() | |
{ | |
InitializeComponent(); | |
} | |
protected async override void OnAppearing() | |
{ | |
base.OnAppearing(); | |
imageContent = await GetMriFilesContent("https://f01.mrcdn.info/file/mrfiles/h/3/q/f/vS.kXnoNLt-.mri"); | |
} | |
private async Task<byte[]> GetMriFilesContent(string url) | |
{ | |
HttpClient _client = new HttpClient(); | |
var content = await _client.GetAsync(url); | |
var page_response = await content.Content.ReadAsByteArrayAsync(); | |
await DisplayAlert("Page Replied", page_response.ToString(), "ok"); | |
string temp_data = await ConvertMriFilesToImages(page_response); | |
return page_response; | |
} | |
private async Task<string> ConvertMriFilesToImages(byte[] fileContent) | |
{ | |
int dataLength = fileContent.Length + 7; | |
List<int> header = new List<int>() { }; | |
byte[] _header = new byte[15]; | |
_header[0] = 82; | |
_header[1] = 73; | |
_header[2] = 70; | |
_header[3] = 70; | |
_header[4] = Convert.ToByte(255 & dataLength); | |
_header[5] = Convert.ToByte(dataLength >> 8 & 255); | |
_header[6] = Convert.ToByte(dataLength >> 16 & 255); | |
_header[7] = Convert.ToByte(dataLength >> 24 & 255); | |
_header[8] = 87; | |
_header[9] = 69; | |
_header[10] = 66; | |
_header[11] = 80; | |
_header[12] = 86; | |
_header[13] = 80; | |
_header[14] = 56; | |
byte[] newcontent = new byte[dataLength]; | |
int stepper = 0; | |
await DisplayAlert("Header Value", string.Join(",", header), "ok"); | |
foreach (var item in fileContent) | |
{ | |
newcontent[stepper] = Convert.ToByte(Convert.ToInt64(item) ^ 101); | |
if (!(stepper>dataLength)) | |
stepper++; | |
} | |
byte[] rv = new byte[_header.Length + newcontent.Length]; | |
System.Buffer.BlockCopy(_header, 0, rv, 0, _header.Length); | |
System.Buffer.BlockCopy(newcontent, 0, rv, _header.Length, newcontent.Length); | |
var temp = ""; | |
foreach (var item in rv) | |
{ | |
temp += (char)item; | |
} | |
await DisplayAlert("New Content", newcontent.ToList()[0].ToString(), "ok"); | |
if (SaveFile(newcontent)) | |
await DisplayAlert("Done", "Success", "ok"); | |
else | |
await DisplayAlert("Failed", "Failed", "ok"); | |
return "Hello"; | |
} | |
public bool SaveFile(byte[] dataToWrite) | |
{ | |
try | |
{ | |
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "image.jpg"); | |
var temp = Convert.ToBase64String(dataToWrite); | |
File.WriteAllBytes(fileName, dataToWrite); | |
return true; | |
} | |
catch (Exception FileHandlingError) | |
{ | |
Console.WriteLine("File Handling Error : " + FileHandlingError); | |
//throw; | |
return false; | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment