using System;
using System.IO;
using Aspose.Imaging.Cloud.Sdk.Api;
using Aspose.Imaging.Cloud.Sdk.Model;
using Aspose.Imaging.Cloud.Sdk.Model.Requests;

string ImageFileName = "example_image.tga";
string ImagesFolder = "ExampleImages";
string CloudFolder = "CloudImages";
string OutputFolder = "Output";

// Get ClientId and ClientSecret from https://dashboard.aspose.cloud/ 
// or use on-premise version (https://docs.aspose.cloud/imaging/getting-started/how-to-run-docker-container/)
var api = new ImagingApi(clientSecret, clientId, "https://api.aspose.cloud");

/// <summary>
/// Convert an image to another format.
/// </summary>
public void ConvertImageFromStorage()
{
    // Upload image to cloud storage
    using (var localInputImage = File.OpenRead(Path.Combine(ImagesFolder, ImageFileName)))
    {
        var uploadFileRequest = new UploadFileRequest(Path.Combine(CloudFolder, imageName), image);
        var result = api.UploadFile(uploadFileRequest);
        if (result.Errors?.Count > 0)
            throw new Exception($"Uploading errors count: {result.Errors.Count}");
    }

    // Please refer to https://docs.aspose.cloud/imaging/supported-file-formats/#convert
    // for possible output formats
    var format = "bmp";
    var folder = CloudFolder; // Input file is saved at the desired folder in the storage
    string storage = null; // Cloud Storage name

    var request = new ConvertImageRequest(SampleImageFileName, format, folder, storage);
    using (var updatedImage = api.ConvertImage(request))
    {
        // Save the image file to output folder
        var convertedImageName = Path.ChangeExtension(ImageFileName, "bmp")
        var path = Path.GetFullPath(Path.Combine(OutputFolder, convertedImageName));
        using (var fileStream = File.Create(path))
        {
            updatedImage.Seek(0, SeekOrigin.Begin);
            updatedImage.CopyTo(fileStream);
        }
    }
}

/// <summary>
/// Convert an image to another format. Image data is passed in a request stream.
/// </summary>
public void CreateConvertedImageFromRequest()
{
    using (var inputImageStream = File.OpenRead(Path.Combine(ImagesFolder, ImageFileName)))
    {
        // Please refer to https://docs.aspose.cloud/imaging/supported-file-formats/#convert
        // for possible output formats
        var format = "bmp";
        string outPath = null; // Path to updated file (if this is empty, response contains streamed image)
        string storage = null; // Cloud Storage name

        var request = new CreateConvertedImageRequest(inputImageStream, format, outPath, storage);

        using (var updatedImage = api.CreateConvertedImage(request))
        {           
            // Save the image file to output folder
            var convertedImageName = Path.ChangeExtension(ImageFileName, "bmp")
            var path = Path.GetFullPath(Path.Combine(OutputFolder, convertedImageName));
            using (var fileStream = File.Create(path))
            {
                updatedImage.Seek(0, SeekOrigin.Begin);
                updatedImage.CopyTo(fileStream);
            }
        }
    }
}