4

从数据库中读取图像后,我需要将该图像转换为 JP2 (JPEG2000)

更新:

我使用 FreeImage 将图像转换为 JP2

   // Load bitmap           
   FIBITMAP dib = FreeImage.LoadEx(imageName);
// Check success
if (dib.IsNull)
{
    MessageBox.Show("Could not load Sample.jpg", "Error");
    return;
}    

// Convert Bitmap to JPEG2000 and save it on the hard disk
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JP2, dib, "Image.jp2", FREE_IMAGE_SAVE_FLAGS.DEFAULT);

// Unload source bitmap
FreeImage.UnloadEx(ref dib);

现在,我需要以高压缩级别压缩此图像!

4

2 回答 2

4

我找到了答案

   // Load bitmap           
   FIBITMAP dib = FreeImage.LoadEx(imageName);
    //
    Check success
    if (dib.IsNull)
    {
        MessageBox.Show("Could not load Sample.jpg", "Error");
        return;
    }    

    // Convert Bitmap to JPEG2000 and save it on the hard disk
    FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JP2, dib, "Image.jp2", FREE_IMAGE_SAVE_FLAGS.EXR_PXR24 | FREE_IMAGE_SAVE_FLAGS.EXR_LC);

    // Unload source bitmap
    FreeImage.UnloadEx(ref dib);
于 2012-12-18T17:30:49.443 回答
0

JP2(和 J2K)格式的标志被简单地解释为缩减因子。这来自 PluginJP2.cpp 源

// if no rate entered, apply a 16:1 rate by default
if(flags == JP2_DEFAULT) {
    parameters.tcp_rates[0] = (float)16;
} else {
    // for now, the flags parameter is only used to specify the rate
    parameters.tcp_rates[0] = (float)(flags & 0x3FF);
}

因此,您实际上可以指定高达 1023:1 的减少率:

// Load bitmap           
FIBITMAP dib = FreeImage.LoadEx(imageName);
// Check success
if (dib.IsNull)
{
    MessageBox.Show("Could not load Sample.jpg", "Error");
    return;
}    

// Convert Bitmap to JPEG2000 and save it on the hard disk
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JP2, dib, "Image.jp2", (FREE_IMAGE_SAVE_FLAGS)1023);

// Unload source bitmap
FreeImage.UnloadEx(ref dib);

这将为您提供一个非常小质量非常低的文件。

于 2017-01-20T15:53:27.923 回答