从数据库读取图像后,我需要将该图像转换为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);
现在,我需要以高压缩级别压缩此图像!
答案 0 :(得分: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);
答案 1 :(得分: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);
这将为您提供非常小的非常低质量的文件。