Skip to content

Instantly share code, notes, and snippets.

@Xonshiz
Created September 14, 2018 13:39
Show Gist options
  • Save Xonshiz/2eeb4d400486685ba6c5ba10c32f5f98 to your computer and use it in GitHub Desktop.
Save Xonshiz/2eeb4d400486685ba6c5ba10c32f5f98 to your computer and use it in GitHub Desktop.
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