ClassLibraryWeiBao/QR二维码/EncodingRegion/VersionInformation.cs

(开头部分) 2KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using Gma.QrCodeNet.Encoding.Positioning;

namespace Gma.QrCodeNet.Encoding.EncodingRegion
{
	/// <summary>
    /// Embed version information for version larger or equal to 7. 
    /// </summary>
    /// <remarks>ISO/IEC 18004:2000 Chapter 8.10 Page 54</remarks>
	internal static class VersionInformation
	{
		private const int s_VIRectangleHeight = 3;
		private const int s_VIRectangleWidth = 6;
		
		/// <summary>
		/// Embed version information to Matrix
		/// Only for version greater or equal to 7
		/// </summary>
		/// <param name="tsMatrix">Matrix</param>
		/// <param name="version">version number</param>
		internal static void EmbedVersionInformation(this TriStateMatrix tsMatrix, int version)
		{
			if(version < 7)
				return;
			BitList versionInfo = VersionInfoBitList(version);
			
			int matrixWidth = tsMatrix.Width;
			//1 cell between version info and position stencil
			int shiftLength = QRCodeConstantVariable.PositionStencilWidth + s_VIRectangleHeight + 1;
			//Reverse order input
			int viIndex = s_LengthDataBits + s_LengthECBits - 1;
			
			for(int viWidth = 0; viWidth < s_VIRectangleWidth; viWidth++)
			{
				for(int viHeight = 0; viHeight < s_VIRectangleHeight; viHeight++)
				{
					bool bit = versionInfo[viIndex];
					viIndex--;
					//Bottom left
					tsMatrix[viWidth, (matrixWidth - shiftLength + viHeight), MatrixStatus.NoMask] = bit;
					//Top right
					tsMatrix[(matrixWidth - shiftLength + viHeight), viWidth, MatrixStatus.NoMask] = bit;
				}
			}
			
		}
		
		private const int s_LengthDataBits = 6;
		private const int s_LengthECBits = 12;
		private const int s_VersionBCHPoly = 0x1f25;
		
		private static BitList VersionInfoBitList(int version)
		{
			BitList result = new BitList();
			result.Add(version, s_LengthDataBits);
			result.Add(BCHCalculator.CalculateBCH(version, s_VersionBCHPoly), s_LengthECBits);
			
			if(result.Count != (s_LengthECBits + s_LengthDataBits))
				throw new Exception("Version Info creation error. Result is not 18 bits");
			return result;
后面还有 3 行代码,购买后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明

AI 解读 AI

登录后可用,每次 10 算力,解读结果公开显示在下面。

还没有人解读过这个文件。