Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中使用imagick将.HEIC转换为JPEG#_C#_Imagick_Imagemagick.net - Fatal编程技术网

C# 在C中使用imagick将.HEIC转换为JPEG#

C# 在C中使用imagick将.HEIC转换为JPEG#,c#,imagick,imagemagick.net,C#,Imagick,Imagemagick.net,我在将heic文件转换为jpeg时遇到问题 我已经尝试过在线搜索,我可以找到如何写入文件夹,但无法找到如何获取转换文件的字节[],以便保存它 byte[] file = null; file = Convert.FromBase64String(dto.File); //Convert HEIC/HEIF to JPF if (extension == "HEIC" || extension == "HEIF") {

我在将heic文件转换为jpeg时遇到问题

我已经尝试过在线搜索,我可以找到如何写入文件夹,但无法找到如何获取转换文件的字节[],以便保存它

       byte[] file = null;
        file = Convert.FromBase64String(dto.File);

        //Convert HEIC/HEIF to JPF
        if (extension == "HEIC" || extension == "HEIF")
        {
          try
          {
           using (MagickImageCollection images = new MagickImageCollection())
            {
              images.Read(file);
              using (IMagickImage vertical = images.AppendVertically())
              {
                var imgname = filename + ".jpeg";
                vertical.Format = MagickFormat.Jpeg;
                vertical.Density = new Density(300);
                vertical.Write(imgname);
                extension = "jpeg";
            }
            }
          }
          catch (Exception ex)
          {
            Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
          }
        }
            documentId = Service.AddSupportingDocument(file, extension , userName);

我无法获取输出文件,它只是一个字符串,你需要创建一个
内存流
,调用
.Write()
,将图像写入内存流,然后在流上调用
.ToArray()
,获取它写入的字节。

根据文档,就像@SLaks建议的那样,你需要通过MemoryStream来完成。直接从文档中检查:

// Read first frame of gif image
using (MagickImage image = new MagickImage("Snakeware.gif"))
{
    // Save frame as jpg
    image.Write("Snakeware.jpg");
}

// Write to stream
MagickReadSettings settings = new MagickReadSettings();
// Tells the xc: reader the image to create should be 800x600
settings.Width = 800;
settings.Height = 600;

using (MemoryStream memStream = new MemoryStream())
{
    // Create image that is completely purple and 800x600
    using (MagickImage image = new MagickImage("xc:purple", settings))
    {
        // Sets the output format to png
        image.Format = MagickFormat.Png;
        // Write the image to the memorystream
        image.Write(memStream);
    }
}

// Read image from file
using (MagickImage image = new MagickImage("Snakeware.png"))
{
    // Sets the output format to jpeg
    image.Format = MagickFormat.Jpeg;
    // Create byte array that contains a jpeg file
    byte[] data = image.ToByteArray();
}

你为什么把它标记为ASP.NET?@mason对不起,这是个错误。这是我关于stackoverflow的第一个问题。在标记您的问题时,请考虑该标记是否真的适用。在这种情况下,ASP.NET与该问题无关。在控制台应用程序中也会发生同样的错误,对吗?因此,也许仅仅使用.NET标记是合适的。@mason好的,我肯定会记住这一点。