2012-06-20 27 views
3
水平

从数据库中读取图像之后,我需要将该图像转换为JP2(JPEG2000)压缩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

此链接可能会给你一个提示: http://stackoverflow.com/questions/590471/jpeg-2000-support-in-c-net – ruckuus

+0

你尝试过什么?你得到了什么错误?您的问题在哪里(从数据库读取或转换图像? – Sascha

+0

@Sascha我不知道如何将图像转换为JP2,我下载了FreeImage来尝试它...问题不在于从数据库读取 –

回答

3

我找到答案

// 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); 
+0

EXR_值是针对EXR文件格式的。你写的东西恰好被解释为80 :1比率 – poizan42

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); 

这会给你一个非常小的非常低质量的文件。