mirror of
https://github.com/zxing/zxing.git
synced 2025-03-05 20:48:51 -08:00
remove obsolete files
git-svn-id: https://zxing.googlecode.com/svn/trunk@2559 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
7616c4d06d
commit
cc5706a72c
|
@ -1,215 +0,0 @@
|
||||||
//
|
|
||||||
// In order to convert some functionality to Visual C#, the Java Language Conversion Assistant
|
|
||||||
// creates "support classes" that duplicate the original functionality.
|
|
||||||
//
|
|
||||||
// Support classes replicate the functionality of the original code, but in some cases they are
|
|
||||||
// substantially different architecturally. Although every effort is made to preserve the
|
|
||||||
// original architecture of the application in the converted project, the user should be aware that
|
|
||||||
// the primary goal of these support classes is to replicate functionality, and that at times
|
|
||||||
// the architecture of the resulting solution may differ somewhat.
|
|
||||||
//
|
|
||||||
|
|
||||||
using System;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Contains conversion support elements such as classes, interfaces and static methods.
|
|
||||||
/// </summary>
|
|
||||||
public class SupportClass
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Converts an array of sbytes to an array of bytes
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sbyteArray">The array of sbytes to be converted</param>
|
|
||||||
/// <returns>The new array of bytes</returns>
|
|
||||||
public static byte[] ToByteArray(sbyte[] sbyteArray)
|
|
||||||
{
|
|
||||||
byte[] byteArray = null;
|
|
||||||
|
|
||||||
if (sbyteArray != null)
|
|
||||||
{
|
|
||||||
byteArray = new byte[sbyteArray.Length];
|
|
||||||
for(int index=0; index < sbyteArray.Length; index++)
|
|
||||||
byteArray[index] = (byte) sbyteArray[index];
|
|
||||||
}
|
|
||||||
return byteArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts a string to an array of bytes
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sourceString">The string to be converted</param>
|
|
||||||
/// <returns>The new array of bytes</returns>
|
|
||||||
public static byte[] ToByteArray(System.String sourceString)
|
|
||||||
{
|
|
||||||
return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts a array of object-type instances to a byte-type array.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="tempObjectArray">Array to convert.</param>
|
|
||||||
/// <returns>An array of byte type elements.</returns>
|
|
||||||
public static byte[] ToByteArray(System.Object[] tempObjectArray)
|
|
||||||
{
|
|
||||||
byte[] byteArray = null;
|
|
||||||
if (tempObjectArray != null)
|
|
||||||
{
|
|
||||||
byteArray = new byte[tempObjectArray.Length];
|
|
||||||
for (int index = 0; index < tempObjectArray.Length; index++)
|
|
||||||
byteArray[index] = (byte)tempObjectArray[index];
|
|
||||||
}
|
|
||||||
return byteArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************/
|
|
||||||
/// <summary>
|
|
||||||
/// Performs an unsigned bitwise right shift with the specified number
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="number">Number to operate on</param>
|
|
||||||
/// <param name="bits">Ammount of bits to shift</param>
|
|
||||||
/// <returns>The resulting number from the shift operation</returns>
|
|
||||||
public static int URShift(int number, int bits)
|
|
||||||
{
|
|
||||||
if ( number >= 0)
|
|
||||||
return number >> bits;
|
|
||||||
else
|
|
||||||
return (number >> bits) + (2 << ~bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Performs an unsigned bitwise right shift with the specified number
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="number">Number to operate on</param>
|
|
||||||
/// <param name="bits">Ammount of bits to shift</param>
|
|
||||||
/// <returns>The resulting number from the shift operation</returns>
|
|
||||||
public static int URShift(int number, long bits)
|
|
||||||
{
|
|
||||||
return URShift(number, (int)bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Performs an unsigned bitwise right shift with the specified number
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="number">Number to operate on</param>
|
|
||||||
/// <param name="bits">Ammount of bits to shift</param>
|
|
||||||
/// <returns>The resulting number from the shift operation</returns>
|
|
||||||
public static long URShift(long number, int bits)
|
|
||||||
{
|
|
||||||
if ( number >= 0)
|
|
||||||
return number >> bits;
|
|
||||||
else
|
|
||||||
return (number >> bits) + (2L << ~bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Performs an unsigned bitwise right shift with the specified number
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="number">Number to operate on</param>
|
|
||||||
/// <param name="bits">Ammount of bits to shift</param>
|
|
||||||
/// <returns>The resulting number from the shift operation</returns>
|
|
||||||
public static long URShift(long number, long bits)
|
|
||||||
{
|
|
||||||
return URShift(number, (int)bits);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************/
|
|
||||||
/// <summary>
|
|
||||||
/// This method returns the literal value received
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="literal">The literal to return</param>
|
|
||||||
/// <returns>The received value</returns>
|
|
||||||
public static long Identity(long literal)
|
|
||||||
{
|
|
||||||
return literal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This method returns the literal value received
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="literal">The literal to return</param>
|
|
||||||
/// <returns>The received value</returns>
|
|
||||||
public static ulong Identity(ulong literal)
|
|
||||||
{
|
|
||||||
return literal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This method returns the literal value received
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="literal">The literal to return</param>
|
|
||||||
/// <returns>The received value</returns>
|
|
||||||
public static float Identity(float literal)
|
|
||||||
{
|
|
||||||
return literal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// This method returns the literal value received
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="literal">The literal to return</param>
|
|
||||||
/// <returns>The received value</returns>
|
|
||||||
public static double Identity(double literal)
|
|
||||||
{
|
|
||||||
return literal;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************/
|
|
||||||
/// <summary>
|
|
||||||
/// Copies an array of chars obtained from a String into a specified array of chars
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sourceString">The String to get the chars from</param>
|
|
||||||
/// <param name="sourceStart">Position of the String to start getting the chars</param>
|
|
||||||
/// <param name="sourceEnd">Position of the String to end getting the chars</param>
|
|
||||||
/// <param name="destinationArray">Array to return the chars</param>
|
|
||||||
/// <param name="destinationStart">Position of the destination array of chars to start storing the chars</param>
|
|
||||||
/// <returns>An array of chars</returns>
|
|
||||||
public static void GetCharsFromString(System.String sourceString, int sourceStart, int sourceEnd, char[] destinationArray, int destinationStart)
|
|
||||||
{
|
|
||||||
int sourceCounter;
|
|
||||||
int destinationCounter;
|
|
||||||
sourceCounter = sourceStart;
|
|
||||||
destinationCounter = destinationStart;
|
|
||||||
while (sourceCounter < sourceEnd)
|
|
||||||
{
|
|
||||||
destinationArray[destinationCounter] = (char) sourceString[sourceCounter];
|
|
||||||
sourceCounter++;
|
|
||||||
destinationCounter++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************/
|
|
||||||
/// <summary>
|
|
||||||
/// Sets the capacity for the specified ArrayList
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="vector">The ArrayList which capacity will be set</param>
|
|
||||||
/// <param name="newCapacity">The new capacity value</param>
|
|
||||||
public static void SetCapacity(System.Collections.ArrayList vector, int newCapacity)
|
|
||||||
{
|
|
||||||
if (newCapacity > vector.Count)
|
|
||||||
vector.AddRange(new Array[newCapacity-vector.Count]);
|
|
||||||
else if (newCapacity < vector.Count)
|
|
||||||
vector.RemoveRange(newCapacity, vector.Count - newCapacity);
|
|
||||||
vector.Capacity = newCapacity;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************/
|
|
||||||
/// <summary>
|
|
||||||
/// Receives a byte array and returns it transformed in an sbyte array
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="byteArray">Byte array to process</param>
|
|
||||||
/// <returns>The transformed array</returns>
|
|
||||||
public static sbyte[] ToSByteArray(byte[] byteArray)
|
|
||||||
{
|
|
||||||
sbyte[] sbyteArray = null;
|
|
||||||
if (byteArray != null)
|
|
||||||
{
|
|
||||||
sbyteArray = new sbyte[byteArray.Length];
|
|
||||||
for(int index=0; index < byteArray.Length; index++)
|
|
||||||
sbyteArray[index] = (sbyte) byteArray[index];
|
|
||||||
}
|
|
||||||
return sbyteArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,54 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using ResultParser = com.google.zxing.client.result.ResultParser;
|
|
||||||
namespace com.google.zxing.client.result.optional
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> <p>Superclass for classes encapsulating results in the NDEF format.
|
|
||||||
/// See <a href="http://www.nfc-forum.org/specs/">http://www.nfc-forum.org/specs/</a>.</p>
|
|
||||||
///
|
|
||||||
/// <p>This code supports a limited subset of NDEF messages, ones that are plausibly
|
|
||||||
/// useful in 2D barcode formats. This generally includes 1-record messages, no chunking,
|
|
||||||
/// "short record" syntax, no ID field.</p>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
abstract class AbstractNDEFResultParser:ResultParser
|
|
||||||
{
|
|
||||||
|
|
||||||
internal static System.String bytesToString(sbyte[] bytes, int offset, int length, System.String encoding)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
System.String tempStr;
|
|
||||||
//UPGRADE_TODO: The differences in the Format of parameters for constructor 'java.lang.String.String' may cause compilation errors. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1092'"
|
|
||||||
tempStr = System.Text.Encoding.GetEncoding(encoding).GetString(SupportClass.ToByteArray(bytes));
|
|
||||||
return new System.String(tempStr.ToCharArray(), offset, length);
|
|
||||||
}
|
|
||||||
catch (System.IO.IOException uee)
|
|
||||||
{
|
|
||||||
// This should only be used when 'encoding' is an encoding that must necessarily
|
|
||||||
// be supported by the JVM, like UTF-8
|
|
||||||
//UPGRADE_TODO: The equivalent in .NET for method 'java.lang.Throwable.toString' may return a different value. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1043'"
|
|
||||||
throw new System.SystemException("Platform does not support required encoding: " + uee);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.client.result.optional
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> <p>Represents a record in an NDEF message. This class only supports certain types
|
|
||||||
/// of records -- namely, non-chunked records, where ID length is omitted, and only
|
|
||||||
/// "short records".</p>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
sealed class NDEFRecord
|
|
||||||
{
|
|
||||||
internal bool MessageBegin
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (header & 0x80) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
internal bool MessageEnd
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return (header & 0x40) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
internal System.String Type
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
internal sbyte[] Payload
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return payload;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
internal int TotalRecordLength
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return totalRecordLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private const int SUPPORTED_HEADER_MASK = 0x3F; // 0 0 1 1 1 111 (the bottom 6 bits matter)
|
|
||||||
private const int SUPPORTED_HEADER = 0x11; // 0 0 0 1 0 001
|
|
||||||
|
|
||||||
public const System.String TEXT_WELL_KNOWN_TYPE = "T";
|
|
||||||
public const System.String URI_WELL_KNOWN_TYPE = "U";
|
|
||||||
public const System.String SMART_POSTER_WELL_KNOWN_TYPE = "Sp";
|
|
||||||
public const System.String ACTION_WELL_KNOWN_TYPE = "act";
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'header '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int header;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'type '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private System.String type;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'payload '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private sbyte[] payload;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'totalRecordLength '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int totalRecordLength;
|
|
||||||
|
|
||||||
private NDEFRecord(int header, System.String type, sbyte[] payload, int totalRecordLength)
|
|
||||||
{
|
|
||||||
this.header = header;
|
|
||||||
this.type = type;
|
|
||||||
this.payload = payload;
|
|
||||||
this.totalRecordLength = totalRecordLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static NDEFRecord readRecord(sbyte[] bytes, int offset)
|
|
||||||
{
|
|
||||||
int header = bytes[offset] & 0xFF;
|
|
||||||
// Does header match what we support in the bits we care about?
|
|
||||||
// XOR figures out where we differ, and if any of those are in the mask, fail
|
|
||||||
if (((header ^ SUPPORTED_HEADER) & SUPPORTED_HEADER_MASK) != 0)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
int typeLength = bytes[offset + 1] & 0xFF;
|
|
||||||
|
|
||||||
int payloadLength = bytes[offset + 2] & 0xFF;
|
|
||||||
|
|
||||||
System.String type = AbstractNDEFResultParser.bytesToString(bytes, offset + 3, typeLength, "US-ASCII");
|
|
||||||
|
|
||||||
sbyte[] payload = new sbyte[payloadLength];
|
|
||||||
Array.Copy(bytes, offset + 3 + typeLength, payload, 0, payloadLength);
|
|
||||||
|
|
||||||
return new NDEFRecord(header, type, payload, 3 + typeLength + payloadLength);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,87 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using ParsedResult = com.google.zxing.client.result.ParsedResult;
|
|
||||||
using ParsedResultType = com.google.zxing.client.result.ParsedResultType;
|
|
||||||
namespace com.google.zxing.client.result.optional
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public sealed class NDEFSmartPosterParsedResult:ParsedResult
|
|
||||||
{
|
|
||||||
public System.String Title
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
public System.String URI
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return uri;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
public int Action
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return action;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
override public System.String DisplayResult
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (title == null)
|
|
||||||
{
|
|
||||||
return uri;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return title + '\n' + uri;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public const int ACTION_UNSPECIFIED = - 1;
|
|
||||||
public const int ACTION_DO = 0;
|
|
||||||
public const int ACTION_SAVE = 1;
|
|
||||||
public const int ACTION_OPEN = 2;
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'title '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private System.String title;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'uri '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private System.String uri;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'action '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int action;
|
|
||||||
|
|
||||||
internal NDEFSmartPosterParsedResult(int action, System.String uri, System.String title):base(ParsedResultType.NDEF_SMART_POSTER)
|
|
||||||
{
|
|
||||||
this.action = action;
|
|
||||||
this.uri = uri;
|
|
||||||
this.title = title;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,96 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using Result = com.google.zxing.Result;
|
|
||||||
namespace com.google.zxing.client.result.optional
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> <p>Recognizes an NDEF message that encodes information according to the
|
|
||||||
/// "Smart Poster Record Type Definition" specification.</p>
|
|
||||||
///
|
|
||||||
/// <p>This actually only supports some parts of the Smart Poster format: title,
|
|
||||||
/// URI, and action records. Icon records are not supported because the size
|
|
||||||
/// of these records are infeasibly large for barcodes. Size and type records
|
|
||||||
/// are not supported. Multiple titles are not supported.</p>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
sealed class NDEFSmartPosterResultParser:AbstractNDEFResultParser
|
|
||||||
{
|
|
||||||
|
|
||||||
public static NDEFSmartPosterParsedResult parse(Result result)
|
|
||||||
{
|
|
||||||
sbyte[] bytes = result.RawBytes;
|
|
||||||
if (bytes == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
NDEFRecord headerRecord = NDEFRecord.readRecord(bytes, 0);
|
|
||||||
// Yes, header record starts and ends a message
|
|
||||||
if (headerRecord == null || !headerRecord.MessageBegin || !headerRecord.MessageEnd)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (!headerRecord.Type.Equals(NDEFRecord.SMART_POSTER_WELL_KNOWN_TYPE))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
int offset = 0;
|
|
||||||
int recordNumber = 0;
|
|
||||||
NDEFRecord ndefRecord = null;
|
|
||||||
sbyte[] payload = headerRecord.Payload;
|
|
||||||
int action = NDEFSmartPosterParsedResult.ACTION_UNSPECIFIED;
|
|
||||||
System.String title = null;
|
|
||||||
System.String uri = null;
|
|
||||||
|
|
||||||
while (offset < payload.Length && (ndefRecord = NDEFRecord.readRecord(payload, offset)) != null)
|
|
||||||
{
|
|
||||||
if (recordNumber == 0 && !ndefRecord.MessageBegin)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
System.String type = ndefRecord.Type;
|
|
||||||
if (NDEFRecord.TEXT_WELL_KNOWN_TYPE.Equals(type))
|
|
||||||
{
|
|
||||||
System.String[] languageText = NDEFTextResultParser.decodeTextPayload(ndefRecord.Payload);
|
|
||||||
title = languageText[1];
|
|
||||||
}
|
|
||||||
else if (NDEFRecord.URI_WELL_KNOWN_TYPE.Equals(type))
|
|
||||||
{
|
|
||||||
uri = NDEFURIResultParser.decodeURIPayload(ndefRecord.Payload);
|
|
||||||
}
|
|
||||||
else if (NDEFRecord.ACTION_WELL_KNOWN_TYPE.Equals(type))
|
|
||||||
{
|
|
||||||
action = ndefRecord.Payload[0];
|
|
||||||
}
|
|
||||||
recordNumber++;
|
|
||||||
offset += ndefRecord.TotalRecordLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (recordNumber == 0 || (ndefRecord != null && !ndefRecord.MessageEnd))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new NDEFSmartPosterParsedResult(action, uri, title);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,65 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using Result = com.google.zxing.Result;
|
|
||||||
using TextParsedResult = com.google.zxing.client.result.TextParsedResult;
|
|
||||||
namespace com.google.zxing.client.result.optional
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> Recognizes an NDEF message that encodes text according to the
|
|
||||||
/// "Text Record Type Definition" specification.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
sealed class NDEFTextResultParser:AbstractNDEFResultParser
|
|
||||||
{
|
|
||||||
|
|
||||||
public static TextParsedResult parse(Result result)
|
|
||||||
{
|
|
||||||
sbyte[] bytes = result.RawBytes;
|
|
||||||
if (bytes == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
NDEFRecord ndefRecord = NDEFRecord.readRecord(bytes, 0);
|
|
||||||
if (ndefRecord == null || !ndefRecord.MessageBegin || !ndefRecord.MessageEnd)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (!ndefRecord.Type.Equals(NDEFRecord.TEXT_WELL_KNOWN_TYPE))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
System.String[] languageText = decodeTextPayload(ndefRecord.Payload);
|
|
||||||
return new TextParsedResult(languageText[0], languageText[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static System.String[] decodeTextPayload(sbyte[] payload)
|
|
||||||
{
|
|
||||||
sbyte statusByte = payload[0];
|
|
||||||
bool isUTF16 = (statusByte & 0x80) != 0;
|
|
||||||
int languageLength = statusByte & 0x1F;
|
|
||||||
// language is always ASCII-encoded:
|
|
||||||
System.String language = bytesToString(payload, 1, languageLength, "US-ASCII");
|
|
||||||
System.String encoding = isUTF16?"UTF-16":"UTF-8";
|
|
||||||
System.String text = bytesToString(payload, 1 + languageLength, payload.Length - languageLength - 1, encoding);
|
|
||||||
return new System.String[]{language, text};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,68 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using Result = com.google.zxing.Result;
|
|
||||||
using URIParsedResult = com.google.zxing.client.result.URIParsedResult;
|
|
||||||
namespace com.google.zxing.client.result.optional
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> Recognizes an NDEF message that encodes a URI according to the
|
|
||||||
/// "URI Record Type Definition" specification.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
sealed class NDEFURIResultParser:AbstractNDEFResultParser
|
|
||||||
{
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'URI_PREFIXES'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private static readonly System.String[] URI_PREFIXES = new System.String[]{null, "http://www.", "https://www.", "http://", "https://", "tel:", "mailto:", "ftp://anonymous:anonymous@", "ftp://ftp.", "ftps://", "sftp://", "smb://", "nfs://", "ftp://", "dav://", "news:", "telnet://", "imap:", "rtsp://", "urn:", "pop:", "sip:", "sips:", "tftp:", "btspp://", "btl2cap://", "btgoep://", "tcpobex://", "irdaobex://", "file://", "urn:epc:id:", "urn:epc:tag:", "urn:epc:pat:", "urn:epc:raw:", "urn:epc:", "urn:nfc:"};
|
|
||||||
|
|
||||||
public static URIParsedResult parse(Result result)
|
|
||||||
{
|
|
||||||
sbyte[] bytes = result.RawBytes;
|
|
||||||
if (bytes == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
NDEFRecord ndefRecord = NDEFRecord.readRecord(bytes, 0);
|
|
||||||
if (ndefRecord == null || !ndefRecord.MessageBegin || !ndefRecord.MessageEnd)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (!ndefRecord.Type.Equals(NDEFRecord.URI_WELL_KNOWN_TYPE))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
System.String fullURI = decodeURIPayload(ndefRecord.Payload);
|
|
||||||
return new URIParsedResult(fullURI, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static System.String decodeURIPayload(sbyte[] payload)
|
|
||||||
{
|
|
||||||
int identifierCode = payload[0] & 0xFF;
|
|
||||||
System.String prefix = null;
|
|
||||||
if (identifierCode < URI_PREFIXES.Length)
|
|
||||||
{
|
|
||||||
prefix = URI_PREFIXES[identifierCode];
|
|
||||||
}
|
|
||||||
System.String restOfURI = bytesToString(payload, 1, payload.Length - 1, "UTF-8");
|
|
||||||
return prefix == null?restOfURI:prefix + restOfURI;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,116 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.common
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> This class implements an array of unsigned bytes.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> dswitkin@google.com (Daniel Switkin)
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public sealed class ByteArray
|
|
||||||
{
|
|
||||||
public bool Empty
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return size_Renamed_Field == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private const int INITIAL_SIZE = 32;
|
|
||||||
|
|
||||||
private sbyte[] bytes;
|
|
||||||
private int size_Renamed_Field;
|
|
||||||
|
|
||||||
public ByteArray()
|
|
||||||
{
|
|
||||||
bytes = null;
|
|
||||||
size_Renamed_Field = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteArray(int size)
|
|
||||||
{
|
|
||||||
bytes = new sbyte[size];
|
|
||||||
this.size_Renamed_Field = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ByteArray(sbyte[] byteArray)
|
|
||||||
{
|
|
||||||
bytes = byteArray;
|
|
||||||
size_Renamed_Field = bytes.Length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Access an unsigned byte at location index.</summary>
|
|
||||||
/// <param name="index">The index in the array to access.
|
|
||||||
/// </param>
|
|
||||||
/// <returns> The unsigned value of the byte as an int.
|
|
||||||
/// </returns>
|
|
||||||
public int at(int index)
|
|
||||||
{
|
|
||||||
return bytes[index] & 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void set_Renamed(int index, int value_Renamed)
|
|
||||||
{
|
|
||||||
bytes[index] = (sbyte) value_Renamed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int size()
|
|
||||||
{
|
|
||||||
return size_Renamed_Field;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void appendByte(int value_Renamed)
|
|
||||||
{
|
|
||||||
if (size_Renamed_Field == 0 || size_Renamed_Field >= bytes.Length)
|
|
||||||
{
|
|
||||||
int newSize = System.Math.Max(INITIAL_SIZE, size_Renamed_Field << 1);
|
|
||||||
reserve(newSize);
|
|
||||||
}
|
|
||||||
bytes[size_Renamed_Field] = (sbyte) value_Renamed;
|
|
||||||
size_Renamed_Field++;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reserve(int capacity)
|
|
||||||
{
|
|
||||||
if (bytes == null || bytes.Length < capacity)
|
|
||||||
{
|
|
||||||
sbyte[] newArray = new sbyte[capacity];
|
|
||||||
if (bytes != null)
|
|
||||||
{
|
|
||||||
Array.Copy(bytes, 0, newArray, 0, bytes.Length);
|
|
||||||
}
|
|
||||||
bytes = newArray;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Copy count bytes from array source starting at offset.
|
|
||||||
public void set_Renamed(sbyte[] source, int offset, int count)
|
|
||||||
{
|
|
||||||
bytes = new sbyte[count];
|
|
||||||
size_Renamed_Field = count;
|
|
||||||
for (int x = 0; x < count; x++)
|
|
||||||
{
|
|
||||||
bytes[x] = source[offset + x];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,176 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Drawing.Imaging;
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
namespace com.google.zxing.common
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> A class which wraps a 2D array of bytes. The default usage is signed. If you want to use it as a
|
|
||||||
/// unsigned container, it's up to you to do byteValue & 0xff at each location.
|
|
||||||
///
|
|
||||||
/// JAVAPORT: The original code was a 2D array of ints, but since it only ever gets assigned
|
|
||||||
/// -1, 0, and 1, I'm going to use less memory and go with bytes.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> dswitkin@google.com (Daniel Switkin)
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public sealed class ByteMatrix
|
|
||||||
{
|
|
||||||
public int Height
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
public int Width
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
public sbyte[][] Array
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'bytes '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private sbyte[][] bytes;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'width '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int width;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'height '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int height;
|
|
||||||
|
|
||||||
public ByteMatrix(int width, int height)
|
|
||||||
{
|
|
||||||
bytes = new sbyte[height][];
|
|
||||||
for (int i = 0; i < height; i++)
|
|
||||||
{
|
|
||||||
bytes[i] = new sbyte[width];
|
|
||||||
}
|
|
||||||
this.width = width;
|
|
||||||
this.height = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public sbyte get_Renamed(int x, int y)
|
|
||||||
{
|
|
||||||
return bytes[y][x];
|
|
||||||
}
|
|
||||||
|
|
||||||
public void set_Renamed(int x, int y, sbyte value_Renamed)
|
|
||||||
{
|
|
||||||
bytes[y][x] = value_Renamed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void set_Renamed(int x, int y, int value_Renamed)
|
|
||||||
{
|
|
||||||
bytes[y][x] = (sbyte) value_Renamed;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void clear(sbyte value_Renamed)
|
|
||||||
{
|
|
||||||
for (int y = 0; y < height; ++y)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < width; ++x)
|
|
||||||
{
|
|
||||||
bytes[y][x] = value_Renamed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public override System.String ToString()
|
|
||||||
{
|
|
||||||
System.Text.StringBuilder result = new System.Text.StringBuilder(2 * width * height + 2);
|
|
||||||
for (int y = 0; y < height; ++y)
|
|
||||||
{
|
|
||||||
for (int x = 0; x < width; ++x)
|
|
||||||
{
|
|
||||||
switch (bytes[y][x])
|
|
||||||
{
|
|
||||||
|
|
||||||
case 0:
|
|
||||||
result.Append(" 0");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
|
||||||
result.Append(" 1");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
result.Append(" ");
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result.Append('\n');
|
|
||||||
}
|
|
||||||
return result.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Converts this ByteMatrix to a black and white bitmap.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>A black and white bitmap converted from this ByteMatrix.</returns>
|
|
||||||
public Bitmap ToBitmap()
|
|
||||||
{
|
|
||||||
const byte BLACK = 0;
|
|
||||||
const byte WHITE = 255;
|
|
||||||
sbyte[][] array = this.Array;
|
|
||||||
int width = this.Width;
|
|
||||||
int height = this.Height;
|
|
||||||
//Here create the Bitmap to the known height, width and format
|
|
||||||
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
|
|
||||||
//Create a BitmapData and Lock all pixels to be written
|
|
||||||
BitmapData bmpData =
|
|
||||||
bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
|
|
||||||
ImageLockMode.WriteOnly, bmp.PixelFormat);
|
|
||||||
|
|
||||||
// If you wanted to support formats other than 8bpp, you should use Bitmap.GetPixelFormatSize(bmp.PixelFormat) to adjust the array size
|
|
||||||
byte[] pixels = new byte[bmpData.Stride * height];
|
|
||||||
|
|
||||||
int iPixelsCounter = 0;
|
|
||||||
for (int y = 0; y < height; y++)
|
|
||||||
{
|
|
||||||
int offset = y * width;
|
|
||||||
for (int x = 0; x < width; x++)
|
|
||||||
{
|
|
||||||
pixels[iPixelsCounter++] = array[y][x] == BLACK ? BLACK : WHITE;
|
|
||||||
}
|
|
||||||
iPixelsCounter += bmpData.Stride - width;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Copy the data from the byte array into BitmapData.Scan0
|
|
||||||
System.Runtime.InteropServices.Marshal.Copy(pixels, 0, bmpData.Scan0, pixels.Length);
|
|
||||||
|
|
||||||
//Unlock the pixels
|
|
||||||
bmp.UnlockBits(bmpData);
|
|
||||||
|
|
||||||
//Return the bitmap
|
|
||||||
return bmp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2007 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.common
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> <p>This is basically a substitute for <code>java.util.Collections</code>, which is not
|
|
||||||
/// present in MIDP 2.0 / CLDC 1.1.</p>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public sealed class Collections
|
|
||||||
{
|
|
||||||
|
|
||||||
private Collections()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Sorts its argument (destructively) using insert sort; in the context of this package
|
|
||||||
/// insertion sort is simple and efficient given its relatively small inputs.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="vector">vector to sort
|
|
||||||
/// </param>
|
|
||||||
/// <param name="comparator">comparator to define sort ordering
|
|
||||||
/// </param>
|
|
||||||
public static void insertionSort(System.Collections.ArrayList vector, Comparator comparator)
|
|
||||||
{
|
|
||||||
int max = vector.Count;
|
|
||||||
for (int i = 1; i < max; i++)
|
|
||||||
{
|
|
||||||
System.Object value_Renamed = vector[i];
|
|
||||||
int j = i - 1;
|
|
||||||
System.Object valueB;
|
|
||||||
while (j >= 0 && comparator.compare((valueB = vector[j]), value_Renamed) > 0)
|
|
||||||
{
|
|
||||||
vector[j + 1] = valueB;
|
|
||||||
j--;
|
|
||||||
}
|
|
||||||
vector[j + 1] = value_Renamed;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2007 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.common
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> This is merely a clone of <code>Comparator</code> since it is not available in
|
|
||||||
/// CLDC 1.1 / MIDP 2.0.
|
|
||||||
/// </summary>
|
|
||||||
public interface Comparator
|
|
||||||
{
|
|
||||||
|
|
||||||
int compare(System.Object o1, System.Object o2);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,66 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.common
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> Superclass of classes encapsulating types ECIs, according to "Extended Channel Interpretations"
|
|
||||||
/// 5.3 of ISO 18004.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public abstract class ECI
|
|
||||||
{
|
|
||||||
virtual public int Value
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return value_Renamed;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'value '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int value_Renamed;
|
|
||||||
|
|
||||||
internal ECI(int value_Renamed)
|
|
||||||
{
|
|
||||||
this.value_Renamed = value_Renamed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <param name="value">ECI value
|
|
||||||
/// </param>
|
|
||||||
/// <returns> {@link ECI} representing ECI of given value, or null if it is legal but unsupported
|
|
||||||
/// </returns>
|
|
||||||
/// <throws> IllegalArgumentException if ECI value is invalid </throws>
|
|
||||||
public static ECI getECIByValue(int value_Renamed)
|
|
||||||
{
|
|
||||||
if (value_Renamed < 0 || value_Renamed > 999999)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("Bad ECI value: " + value_Renamed);
|
|
||||||
}
|
|
||||||
if (value_Renamed < 900)
|
|
||||||
{
|
|
||||||
// Character set ECIs use 000000 - 000899
|
|
||||||
return CharacterSetECI.getCharacterSetECIByValue(value_Renamed);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,174 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2007 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.common.reedsolomon
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> <p>This class contains utility methods for performing mathematical operations over
|
|
||||||
/// the Galois Field GF(256). Operations use a given primitive polynomial in calculations.</p>
|
|
||||||
///
|
|
||||||
/// <p>Throughout this package, elements of GF(256) are represented as an <code>int</code>
|
|
||||||
/// for convenience and speed (but at the cost of memory).
|
|
||||||
/// Only the bottom 8 bits are really used.</p>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public sealed class GF256
|
|
||||||
{
|
|
||||||
internal GF256Poly Zero
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
internal GF256Poly One
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return one;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'QR_CODE_FIELD '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
public static readonly GF256 QR_CODE_FIELD = new GF256(0x011D); // x^8 + x^4 + x^3 + x^2 + 1
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'DATA_MATRIX_FIELD '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
public static readonly GF256 DATA_MATRIX_FIELD = new GF256(0x012D); // x^8 + x^5 + x^3 + x^2 + 1
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'expTable '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int[] expTable;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'logTable '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int[] logTable;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'zero '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private GF256Poly zero;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'one '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private GF256Poly one;
|
|
||||||
|
|
||||||
/// <summary> Create a representation of GF(256) using the given primitive polynomial.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="primitive">irreducible polynomial whose coefficients are represented by
|
|
||||||
/// the bits of an int, where the least-significant bit represents the constant
|
|
||||||
/// coefficient
|
|
||||||
/// </param>
|
|
||||||
private GF256(int primitive)
|
|
||||||
{
|
|
||||||
expTable = new int[256];
|
|
||||||
logTable = new int[256];
|
|
||||||
int x = 1;
|
|
||||||
for (int i = 0; i < 256; i++)
|
|
||||||
{
|
|
||||||
expTable[i] = x;
|
|
||||||
x <<= 1; // x = x * 2; we're assuming the generator alpha is 2
|
|
||||||
if (x >= 0x100)
|
|
||||||
{
|
|
||||||
x ^= primitive;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (int i = 0; i < 255; i++)
|
|
||||||
{
|
|
||||||
logTable[expTable[i]] = i;
|
|
||||||
}
|
|
||||||
// logTable[0] == 0 but this should never be used
|
|
||||||
zero = new GF256Poly(this, new int[]{0});
|
|
||||||
one = new GF256Poly(this, new int[]{1});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <returns> the monomial representing coefficient * x^degree
|
|
||||||
/// </returns>
|
|
||||||
internal GF256Poly buildMonomial(int degree, int coefficient)
|
|
||||||
{
|
|
||||||
if (degree < 0)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException();
|
|
||||||
}
|
|
||||||
if (coefficient == 0)
|
|
||||||
{
|
|
||||||
return zero;
|
|
||||||
}
|
|
||||||
int[] coefficients = new int[degree + 1];
|
|
||||||
coefficients[0] = coefficient;
|
|
||||||
return new GF256Poly(this, coefficients);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary> Implements both addition and subtraction -- they are the same in GF(256).
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <returns> sum/difference of a and b
|
|
||||||
/// </returns>
|
|
||||||
internal static int addOrSubtract(int a, int b)
|
|
||||||
{
|
|
||||||
return a ^ b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <returns> 2 to the power of a in GF(256)
|
|
||||||
/// </returns>
|
|
||||||
internal int exp(int a)
|
|
||||||
{
|
|
||||||
return expTable[a];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <returns> base 2 log of a in GF(256)
|
|
||||||
/// </returns>
|
|
||||||
internal int log(int a)
|
|
||||||
{
|
|
||||||
if (a == 0)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException();
|
|
||||||
}
|
|
||||||
return logTable[a];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <returns> multiplicative inverse of a
|
|
||||||
/// </returns>
|
|
||||||
internal int inverse(int a)
|
|
||||||
{
|
|
||||||
if (a == 0)
|
|
||||||
{
|
|
||||||
throw new System.ArithmeticException();
|
|
||||||
}
|
|
||||||
return expTable[255 - logTable[a]];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <param name="a">
|
|
||||||
/// </param>
|
|
||||||
/// <param name="b">
|
|
||||||
/// </param>
|
|
||||||
/// <returns> product of a and b in GF(256)
|
|
||||||
/// </returns>
|
|
||||||
internal int multiply(int a, int b)
|
|
||||||
{
|
|
||||||
if (a == 0 || b == 0)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (a == 1)
|
|
||||||
{
|
|
||||||
return b;
|
|
||||||
}
|
|
||||||
if (b == 1)
|
|
||||||
{
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
return expTable[(logTable[a] + logTable[b]) % 255];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,328 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2007 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.common.reedsolomon
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> <p>Represents a polynomial whose coefficients are elements of GF(256).
|
|
||||||
/// Instances of this class are immutable.</p>
|
|
||||||
///
|
|
||||||
/// <p>Much credit is due to William Rucklidge since portions of this code are an indirect
|
|
||||||
/// port of his C++ Reed-Solomon implementation.</p>
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> Sean Owen
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
sealed class GF256Poly
|
|
||||||
{
|
|
||||||
internal int[] Coefficients
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return coefficients;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/// <returns> degree of this polynomial
|
|
||||||
/// </returns>
|
|
||||||
internal int Degree
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return coefficients.Length - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
/// <returns> true iff this polynomial is the monomial "0"
|
|
||||||
/// </returns>
|
|
||||||
internal bool Zero
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return coefficients[0] == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'field '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private GF256 field;
|
|
||||||
//UPGRADE_NOTE: Final was removed from the declaration of 'coefficients '. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'"
|
|
||||||
private int[] coefficients;
|
|
||||||
|
|
||||||
/// <param name="field">the {@link GF256} instance representing the field to use
|
|
||||||
/// to perform computations
|
|
||||||
/// </param>
|
|
||||||
/// <param name="coefficients">coefficients as ints representing elements of GF(256), arranged
|
|
||||||
/// from most significant (highest-power term) coefficient to least significant
|
|
||||||
/// </param>
|
|
||||||
/// <throws> IllegalArgumentException if argument is null or empty, </throws>
|
|
||||||
/// <summary> or if leading coefficient is 0 and this is not a
|
|
||||||
/// constant polynomial (that is, it is not the monomial "0")
|
|
||||||
/// </summary>
|
|
||||||
internal GF256Poly(GF256 field, int[] coefficients)
|
|
||||||
{
|
|
||||||
if (coefficients == null || coefficients.Length == 0)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException();
|
|
||||||
}
|
|
||||||
this.field = field;
|
|
||||||
int coefficientsLength = coefficients.Length;
|
|
||||||
if (coefficientsLength > 1 && coefficients[0] == 0)
|
|
||||||
{
|
|
||||||
// Leading term must be non-zero for anything except the constant polynomial "0"
|
|
||||||
int firstNonZero = 1;
|
|
||||||
while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0)
|
|
||||||
{
|
|
||||||
firstNonZero++;
|
|
||||||
}
|
|
||||||
if (firstNonZero == coefficientsLength)
|
|
||||||
{
|
|
||||||
this.coefficients = field.Zero.coefficients;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.coefficients = new int[coefficientsLength - firstNonZero];
|
|
||||||
Array.Copy(coefficients, firstNonZero, this.coefficients, 0, this.coefficients.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.coefficients = coefficients;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <returns> coefficient of x^degree term in this polynomial
|
|
||||||
/// </returns>
|
|
||||||
internal int getCoefficient(int degree)
|
|
||||||
{
|
|
||||||
return coefficients[coefficients.Length - 1 - degree];
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <returns> evaluation of this polynomial at a given point
|
|
||||||
/// </returns>
|
|
||||||
internal int evaluateAt(int a)
|
|
||||||
{
|
|
||||||
if (a == 0)
|
|
||||||
{
|
|
||||||
// Just return the x^0 coefficient
|
|
||||||
return getCoefficient(0);
|
|
||||||
}
|
|
||||||
int size = coefficients.Length;
|
|
||||||
if (a == 1)
|
|
||||||
{
|
|
||||||
// Just the sum of the coefficients
|
|
||||||
int result = 0;
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
result = GF256.addOrSubtract(result, coefficients[i]);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
int result2 = coefficients[0];
|
|
||||||
for (int i = 1; i < size; i++)
|
|
||||||
{
|
|
||||||
result2 = GF256.addOrSubtract(field.multiply(a, result2), coefficients[i]);
|
|
||||||
}
|
|
||||||
return result2;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal GF256Poly addOrSubtract(GF256Poly other)
|
|
||||||
{
|
|
||||||
if (!field.Equals(other.field))
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("GF256Polys do not have same GF256 field");
|
|
||||||
}
|
|
||||||
if (Zero)
|
|
||||||
{
|
|
||||||
return other;
|
|
||||||
}
|
|
||||||
if (other.Zero)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
int[] smallerCoefficients = this.coefficients;
|
|
||||||
int[] largerCoefficients = other.coefficients;
|
|
||||||
if (smallerCoefficients.Length > largerCoefficients.Length)
|
|
||||||
{
|
|
||||||
int[] temp = smallerCoefficients;
|
|
||||||
smallerCoefficients = largerCoefficients;
|
|
||||||
largerCoefficients = temp;
|
|
||||||
}
|
|
||||||
int[] sumDiff = new int[largerCoefficients.Length];
|
|
||||||
int lengthDiff = largerCoefficients.Length - smallerCoefficients.Length;
|
|
||||||
// Copy high-order terms only found in higher-degree polynomial's coefficients
|
|
||||||
Array.Copy(largerCoefficients, 0, sumDiff, 0, lengthDiff);
|
|
||||||
|
|
||||||
for (int i = lengthDiff; i < largerCoefficients.Length; i++)
|
|
||||||
{
|
|
||||||
sumDiff[i] = GF256.addOrSubtract(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new GF256Poly(field, sumDiff);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal GF256Poly multiply(GF256Poly other)
|
|
||||||
{
|
|
||||||
if (!field.Equals(other.field))
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("GF256Polys do not have same GF256 field");
|
|
||||||
}
|
|
||||||
if (Zero || other.Zero)
|
|
||||||
{
|
|
||||||
return field.Zero;
|
|
||||||
}
|
|
||||||
int[] aCoefficients = this.coefficients;
|
|
||||||
int aLength = aCoefficients.Length;
|
|
||||||
int[] bCoefficients = other.coefficients;
|
|
||||||
int bLength = bCoefficients.Length;
|
|
||||||
int[] product = new int[aLength + bLength - 1];
|
|
||||||
for (int i = 0; i < aLength; i++)
|
|
||||||
{
|
|
||||||
int aCoeff = aCoefficients[i];
|
|
||||||
for (int j = 0; j < bLength; j++)
|
|
||||||
{
|
|
||||||
product[i + j] = GF256.addOrSubtract(product[i + j], field.multiply(aCoeff, bCoefficients[j]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new GF256Poly(field, product);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal GF256Poly multiply(int scalar)
|
|
||||||
{
|
|
||||||
if (scalar == 0)
|
|
||||||
{
|
|
||||||
return field.Zero;
|
|
||||||
}
|
|
||||||
if (scalar == 1)
|
|
||||||
{
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
int size = coefficients.Length;
|
|
||||||
int[] product = new int[size];
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
product[i] = field.multiply(coefficients[i], scalar);
|
|
||||||
}
|
|
||||||
return new GF256Poly(field, product);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal GF256Poly multiplyByMonomial(int degree, int coefficient)
|
|
||||||
{
|
|
||||||
if (degree < 0)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException();
|
|
||||||
}
|
|
||||||
if (coefficient == 0)
|
|
||||||
{
|
|
||||||
return field.Zero;
|
|
||||||
}
|
|
||||||
int size = coefficients.Length;
|
|
||||||
int[] product = new int[size + degree];
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
product[i] = field.multiply(coefficients[i], coefficient);
|
|
||||||
}
|
|
||||||
return new GF256Poly(field, product);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal GF256Poly[] divide(GF256Poly other)
|
|
||||||
{
|
|
||||||
if (!field.Equals(other.field))
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("GF256Polys do not have same GF256 field");
|
|
||||||
}
|
|
||||||
if (other.Zero)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("Divide by 0");
|
|
||||||
}
|
|
||||||
|
|
||||||
GF256Poly quotient = field.Zero;
|
|
||||||
GF256Poly remainder = this;
|
|
||||||
|
|
||||||
int denominatorLeadingTerm = other.getCoefficient(other.Degree);
|
|
||||||
int inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);
|
|
||||||
|
|
||||||
while (remainder.Degree >= other.Degree && !remainder.Zero)
|
|
||||||
{
|
|
||||||
int degreeDifference = remainder.Degree - other.Degree;
|
|
||||||
int scale = field.multiply(remainder.getCoefficient(remainder.Degree), inverseDenominatorLeadingTerm);
|
|
||||||
GF256Poly term = other.multiplyByMonomial(degreeDifference, scale);
|
|
||||||
GF256Poly iterationQuotient = field.buildMonomial(degreeDifference, scale);
|
|
||||||
quotient = quotient.addOrSubtract(iterationQuotient);
|
|
||||||
remainder = remainder.addOrSubtract(term);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new GF256Poly[]{quotient, remainder};
|
|
||||||
}
|
|
||||||
|
|
||||||
public override System.String ToString()
|
|
||||||
{
|
|
||||||
System.Text.StringBuilder result = new System.Text.StringBuilder(8 * Degree);
|
|
||||||
for (int degree = Degree; degree >= 0; degree--)
|
|
||||||
{
|
|
||||||
int coefficient = getCoefficient(degree);
|
|
||||||
if (coefficient != 0)
|
|
||||||
{
|
|
||||||
if (coefficient < 0)
|
|
||||||
{
|
|
||||||
result.Append(" - ");
|
|
||||||
coefficient = - coefficient;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (result.Length > 0)
|
|
||||||
{
|
|
||||||
result.Append(" + ");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (degree == 0 || coefficient != 1)
|
|
||||||
{
|
|
||||||
int alphaPower = field.log(coefficient);
|
|
||||||
if (alphaPower == 0)
|
|
||||||
{
|
|
||||||
result.Append('1');
|
|
||||||
}
|
|
||||||
else if (alphaPower == 1)
|
|
||||||
{
|
|
||||||
result.Append('a');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Append("a^");
|
|
||||||
result.Append(alphaPower);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (degree != 0)
|
|
||||||
{
|
|
||||||
if (degree == 1)
|
|
||||||
{
|
|
||||||
result.Append('x');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
result.Append("x^");
|
|
||||||
result.Append(degree);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result.ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,196 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2008 ZXing authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
namespace com.google.zxing.qrcode.encoder
|
|
||||||
{
|
|
||||||
|
|
||||||
/// <summary> JAVAPORT: This should be combined with BitArray in the future, although that class is not yet
|
|
||||||
/// dynamically resizeable. This implementation is reasonable but there is a lot of function calling
|
|
||||||
/// in loops I'd like to get rid of.
|
|
||||||
///
|
|
||||||
/// </summary>
|
|
||||||
/// <author> satorux@google.com (Satoru Takabayashi) - creator
|
|
||||||
/// </author>
|
|
||||||
/// <author> dswitkin@google.com (Daniel Switkin) - ported from C++
|
|
||||||
/// </author>
|
|
||||||
/// <author>www.Redivivus.in (suraj.supekar@redivivus.in) - Ported from ZXING Java Source
|
|
||||||
/// </author>
|
|
||||||
public sealed class BitVector
|
|
||||||
{
|
|
||||||
public sbyte[] Array
|
|
||||||
{
|
|
||||||
// Callers should not assume that array.length is the exact number of bytes needed to hold
|
|
||||||
// sizeInBits - it will typically be larger for efficiency.
|
|
||||||
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private int sizeInBits;
|
|
||||||
private sbyte[] array;
|
|
||||||
|
|
||||||
// For efficiency, start out with some room to work.
|
|
||||||
private const int DEFAULT_SIZE_IN_BYTES = 32;
|
|
||||||
|
|
||||||
public BitVector()
|
|
||||||
{
|
|
||||||
sizeInBits = 0;
|
|
||||||
array = new sbyte[DEFAULT_SIZE_IN_BYTES];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the bit value at "index".
|
|
||||||
public int at(int index)
|
|
||||||
{
|
|
||||||
if (index < 0 || index >= sizeInBits)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("Bad index: " + index);
|
|
||||||
}
|
|
||||||
int value_Renamed = array[index >> 3] & 0xff;
|
|
||||||
return (value_Renamed >> (7 - (index & 0x7))) & 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the number of bits in the bit vector.
|
|
||||||
public int size()
|
|
||||||
{
|
|
||||||
return sizeInBits;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the number of bytes in the bit vector.
|
|
||||||
public int sizeInBytes()
|
|
||||||
{
|
|
||||||
return (sizeInBits + 7) >> 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append one bit to the bit vector.
|
|
||||||
public void appendBit(int bit)
|
|
||||||
{
|
|
||||||
if (!(bit == 0 || bit == 1))
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("Bad bit");
|
|
||||||
}
|
|
||||||
int numBitsInLastByte = sizeInBits & 0x7;
|
|
||||||
// We'll expand array if we don't have bits in the last byte.
|
|
||||||
if (numBitsInLastByte == 0)
|
|
||||||
{
|
|
||||||
appendByte(0);
|
|
||||||
sizeInBits -= 8;
|
|
||||||
}
|
|
||||||
// Modify the last byte.
|
|
||||||
array[sizeInBits >> 3] |= (sbyte) ((bit << (7 - numBitsInLastByte)));
|
|
||||||
++sizeInBits;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append "numBits" bits in "value" to the bit vector.
|
|
||||||
// REQUIRES: 0<= numBits <= 32.
|
|
||||||
//
|
|
||||||
// Examples:
|
|
||||||
// - appendBits(0x00, 1) adds 0.
|
|
||||||
// - appendBits(0x00, 4) adds 0000.
|
|
||||||
// - appendBits(0xff, 8) adds 11111111.
|
|
||||||
public void appendBits(int value_Renamed, int numBits)
|
|
||||||
{
|
|
||||||
if (numBits < 0 || numBits > 32)
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("Num bits must be between 0 and 32");
|
|
||||||
}
|
|
||||||
int numBitsLeft = numBits;
|
|
||||||
while (numBitsLeft > 0)
|
|
||||||
{
|
|
||||||
// Optimization for byte-oriented appending.
|
|
||||||
if ((sizeInBits & 0x7) == 0 && numBitsLeft >= 8)
|
|
||||||
{
|
|
||||||
int newByte = (value_Renamed >> (numBitsLeft - 8)) & 0xff;
|
|
||||||
appendByte(newByte);
|
|
||||||
numBitsLeft -= 8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int bit = (value_Renamed >> (numBitsLeft - 1)) & 1;
|
|
||||||
appendBit(bit);
|
|
||||||
--numBitsLeft;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Append "bits".
|
|
||||||
public void appendBitVector(BitVector bits)
|
|
||||||
{
|
|
||||||
int size = bits.size();
|
|
||||||
for (int i = 0; i < size; ++i)
|
|
||||||
{
|
|
||||||
appendBit(bits.at(i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modify the bit vector by XOR'ing with "other"
|
|
||||||
public void xor(BitVector other)
|
|
||||||
{
|
|
||||||
if (sizeInBits != other.size())
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("BitVector sizes don't match");
|
|
||||||
}
|
|
||||||
int sizeInBytes = (sizeInBits + 7) >> 3;
|
|
||||||
for (int i = 0; i < sizeInBytes; ++i)
|
|
||||||
{
|
|
||||||
// The last byte could be incomplete (i.e. not have 8 bits in
|
|
||||||
// it) but there is no problem since 0 XOR 0 == 0.
|
|
||||||
array[i] ^= other.array[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return String like "01110111" for debugging.
|
|
||||||
public override System.String ToString()
|
|
||||||
{
|
|
||||||
System.Text.StringBuilder result = new System.Text.StringBuilder(sizeInBits);
|
|
||||||
for (int i = 0; i < sizeInBits; ++i)
|
|
||||||
{
|
|
||||||
if (at(i) == 0)
|
|
||||||
{
|
|
||||||
result.Append('0');
|
|
||||||
}
|
|
||||||
else if (at(i) == 1)
|
|
||||||
{
|
|
||||||
result.Append('1');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new System.ArgumentException("Byte isn't 0 or 1");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add a new byte to the end, possibly reallocating and doubling the size of the array if we've
|
|
||||||
// run out of room.
|
|
||||||
private void appendByte(int value_Renamed)
|
|
||||||
{
|
|
||||||
if ((sizeInBits >> 3) == array.Length)
|
|
||||||
{
|
|
||||||
sbyte[] newArray = new sbyte[(array.Length << 1)];
|
|
||||||
// Redivivus.in Java to c# Porting update
|
|
||||||
// 30/01/2010
|
|
||||||
// added namespace system
|
|
||||||
System.Array.Copy(array, 0, newArray, 0, array.Length);
|
|
||||||
array = newArray;
|
|
||||||
}
|
|
||||||
array[sizeInBits >> 3] = (sbyte) value_Renamed;
|
|
||||||
sizeInBits += 8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue