我正在使用 Digital Persona SDK 以 wsq 格式扫描指纹,我需要 512 x 512 图像,SDK 仅导出 357 x 392 图像。
sdk 提供了一种方法来以 wsq 格式压缩从设备捕获的图像并返回我可以写入磁盘的字节数组。
-我尝试为 512 x 512 图像分配 262144 的缓冲区。
- 用每个字节的白色像素数据填充新缓冲区,使其值为 255。
- 将原始图像缓冲区复制到新的图像缓冲区中。原始图像不需要居中,但重要的是确保在不损坏图像数据的情况下进行复制。
总而言之,我试图将旧图像复制到新图像的右上角。
DPUruNet.Compression.Start();
DPUruNet.Compression.SetWsqBitrate(95, 0);
Fid capturedImage = captureResult.Data;
//Fill the new buffer with white pixel data each byte to value 255.
byte[] bytesWSQ512 = new byte[262144];
for (int i = 0; i < bytesWSQ512.Length; i++)
{
bytesWSQ512[i] = 255;
}
//Compress capturedImage and get bytes (357 x 392)
byte[] bytesWSQ = DPUruNet.Compression.CompressRaw(capturedImage.Views[0].Width, capturedImage.Views[0].Height, 500, 8, capturedImage.Views[0].RawImage, CompressionAlgorithm.COMPRESSION_WSQ_NIST);
//Copy the original image buffer into the new image buffer
for (int i = 0; i < capturedImage.Views[0].Height; i++)
{
for (int j = 0; j < capturedImage.Views[0].Width; j++)
{
bytesWSQ512[i * bytesWSQ512.Length + j ] = bytesWSQ[i * capturedImage.Views[0].Width + j];
}
}
//Write bytes to disk
File.WriteAllBytes(@"C:\Users\Admin\Desktop\bytesWSQ512.wsq", bytesWSQ512);
DPUruNet.Compression.Finish();
运行该片段时,我得到 IndexOutOfRangeException,我不知道循环或新数组的索引计算是否正确。
这是我正在尝试做的事情的代表。