6

jp2のバイト配列がありますが、どうすればJPGファイルに変換できますか?ありがとうございました

すべての答えに感謝します。私はいくつかの違いを生み、ほぼ成功しました。これが私がそれをする方法です:

using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        String id = (String)reader["ID"];
                        blob = (byte[])reader["Data"];

                        using (MemoryStream ms = new MemoryStream(blob))
                        {
                            FIBITMAP dib = FreeImage.LoadFromStream(ms);                            
                            if (dib.IsNull)
                            {
                                continue;
                            }                           
                            string jpgName = getJpgName(id);
                            FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, jpgName, FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL);
                        }
                    }
                }

byte[]データベースから読みました。ここで別の問題が発生します。メモリリークがあります!誰かがそれを選ぶことができますか?

4

2 に答える 2

3

これを行うための.Netには何も組み込まれていませんが、これを行うことができる無料のライブラリであるFreeImageを使用できます。

これを行う例を次に示します。

FIBITMAP dib = FreeImage.LoadEx("test.jp2");
//save the image out to disk    
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, dib, "test.jpg", FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYNORMAL);
//or even turn it into a normal Bitmap for later use
Bitmap bitmap = FreeImage.GetBitmap(dib);

バイトのストリームから変換するために、uはこれを試すことができます:

byte[] myByte = new byte[10];
MemoryStream theMemStream = new MemoryStream();
theMemStream.Write(myByte, 0, myByte.Length);
FreeImageBitmap fbm = FreeImageBitmap.FromStream(theMemStream);
fbm.Save("text.jpg",FREE_IMAGE_STREAM.FIF_JPEG);
于 2011-02-16T08:16:03.617 に答える
0

nugetパッケージからFreeImageAPIをダウンロードします。プロジェクトにFreeImageAPI.dllの参照を追加します。パッケージフォルダを確認して、FreeImage.dllを作成し、そのdllをプロジェクトbinフォルダに保存します。nugetパッケージからFreeImageAPIをダウンロードします。プロジェクトにFreeImageAPI.dllの参照を追加します。パッケージフォルダを確認して、FreeImage.dllを作成し、そのdllをプロジェクトbinフォルダに保存します。

    public ActionResult FileUpload(HttpPostedFileBase file)
    {
      Stream str =  file.InputStream;
      MemoryStream theMemStream = new MemoryStream();
      FIBITMAP dib = FreeImage.LoadFromStream(str);
      FreeImage.SaveToStream(dib,theMemStream,FREE_IMAGE_FORMAT.FIF_JPEG);
      return RedirectToAction("Index", theMemStream);
    }

theMemStreamをbyte[]、base64stringなどに変更します。

于 2020-03-12T07:43:32.967 に答える