从SVS文件中提取完整比例的图像

时间:2018-12-10 02:31:11

标签: c tiff libtiff

我正在尝试使用Libtiff提取SVS文件的第一页。 SVS文件对此图像使用JPEG2000压缩。

我的计划是:

  1. 从SVS的第一页中提取原始图块,并且
  2. 使用OpenJPEG对其进行解码。

下面是我试图从SVS中提取原始图块的内容。我从152MB的SVS文件中只有一个43KB的输出文件(无法提取原始图块)。

我希望有人能让我知道如何从SVS文件中提取图块。

let mysql = require('mysql');
let db = require('../configs/db');
let pool = mysql.createPool(db);

connPool (sql, val, cb) {  //function name
    pool.getConnection((err, conn) => {
      if(err){
        console.log('Connection Error:' + err);
      }else{
        console.log('allConnections:' + pool._allConnections.length);
        let q = conn.query(sql, val, (err, rows,fields) => {
            if (err) {
                console.log('Query:' + sql + ' error:' + err);
             }
            cb(err, rows, fields);
            conn.release();
        });
      }
    });
},

...
let func = require('../sql/func');
let arr = [['Tom', 1], ['Jerry', 2], ['Jessica', 3]];
sql =  'update tbl set col1=?, col3=NOW() where col1=?';

func.connPool(sql, arr , (err,rows,fields) => {
  if(err==null){
     res.json({code: 200, msg: 'success'});
  } else {
     res.json({code: 400, msg: 'failed'+err});
  }
});

1 个答案:

答案 0 :(得分:2)

您正在编写每个8字节的图块。 sizeof(buf)是指针buf的字节大小。您想使用由TIFFReadRawTile返回的实际读取的字节数:

tsize_t size = TIFFReadRawTile(tiff_in, tile, buf, (tsize_t)-1);
TIFFWriteRawTile(tiff_out, tile, buf, size);

请注意,这里是将JPEG2000压缩的数据复制到输出文件。您必须使用OpenJPEG解压缩此数据,然后写入未压缩切片大小的数据,在连续的平面配置中为tileWidth * tileLength * samplePerPixel * bitsPerSample / 8,在单独的平面配置中为tileWidth * tileLength * bitsPerSample / 8


使用TIFFGetFieldTIFFSetField时,需要检查返回值。如果发生错误,则返回0。您不能依赖未正确读取的值。

其他错误和警告通常会打印到stderr。如果您在Windows下进行开发,则通常不会显示这些内容。我建议您研究TIFFSetErrorHandlerTIFFSetWarningHandler,在此处设置合适的消息显示功能将在开发过程中极大地帮助您。