我从一个tiff文件中读取了像素块,想自己编写代码把像素块写入到一个新的tiff文件中,但是写入后图像显示不完全,有的地方被黑色覆盖。查找后发现每个Strip块的大小与原文件不同。请问Strip块的大小该如何设置。
这是我设置Strip块大小的代码
m_ScripRows = 8 * 1024;//RowsPerStrip
if(m_PlanarConfig == 1)
{
m_ScriptCount = floor((double)(m_SizeDoc.cy + m_ScripRows - 1) / m_ScripRows);//stripCount
}
else
{
m_ScriptCount = floor((double)(m_SizeDoc.cy + m_ScripRows - 1) / m_ScripRows) * m_SamplesPerPixel;
}
int PerScripByte = m_PixSize / m_ScriptCount;
int LastScripByte = 0;
if(m_PixSize % m_ScriptCount == 0)//m_PixSize像素点总大小
{
LastScripByte = PerScripByte;
}
else
{
LastScripByte = PerScripByte + (m_PixSize % m_ScriptCount);
}
delete[] m_ScripArr;//存放Strip的OffSet
delete[] m_ScripBytes;//存放Strip大小
if(m_ScriptCount != 0)
{
m_ScripArr = new int[m_ScriptCount];
m_ScripBytes = new int[m_ScriptCount];
//m_ScripArr[0] = 0x0008;
//int tmp[470];
if(m_ScriptCount >= 1)
{
for(int i = 0; i < m_ScriptCount - 1; i++)
{
m_ScripBytes[i] = PerScripByte;
m_ScripArr[i] = 0x0008 + i* PerScripByte;
}
m_ScripArr[m_ScriptCount - 1] = 8 + (m_ScriptCount - 1)* PerScripByte;
m_ScripBytes[m_ScriptCount - 1] = LastScripByte;
}
}
}
该回答引用ChatGPT
Strip块的大小应该根据图像的大小和存储要求来设置。您可以考虑以下几点:
通常,一个好的起点是将Strip块大小设置为图像高度的整数倍,并确保Strip块大小不超过8 KB(这是TIFF文件格式的限制)。如果您需要进一步调整Strip块大小,请尝试使用不同的Strip块大小来重新生成图像,并观察生成的图像质量和兼容性。
另外,您还需要确保每个Strip块的偏移量和大小都正确设置,以便正确地写入像素数据。如果您的偏移量和大小不正确,可能会导致图像显示不完全或部分数据丢失。