/* * Copyright 2012 ZXing.Net 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 ZXing { /// /// A smart class to decode the barcode inside a bitmap object /// public class BarcodeReader : BarcodeReaderGeneric, IBarcodeReader { private readonly Func createLuminanceSource; /// /// Initializes a new instance of the class. /// public BarcodeReader(Func createLuminanceSource) : this(null, createLuminanceSource, null) { } /// /// Initializes a new instance of the class. /// /// Sets the reader which should be used to find and decode the barcode. /// If null then MultiFormatReader is used /// Sets the function to create a luminance source object for a bitmap. /// If null, an exception is thrown when Decode is called /// Sets the function to create a binarizer object for a luminance source. /// If null then HybridBinarizer is used public BarcodeReader(Reader reader, Func createLuminanceSource, Func createBinarizer ) : this(reader, createLuminanceSource, createBinarizer, null) { } /// /// Initializes a new instance of the class. /// /// Sets the reader which should be used to find and decode the barcode. /// If null then MultiFormatReader is used /// Sets the function to create a luminance source object for a bitmap. /// If null, an exception is thrown when Decode is called /// Sets the function to create a binarizer object for a luminance source. /// If null then HybridBinarizer is used /// Sets the function to create a luminance source object for a rgb raw byte array. public BarcodeReader(Reader reader, Func createLuminanceSource, Func createBinarizer, Func createRGBLuminanceSource ) : base(reader, createBinarizer, createRGBLuminanceSource) { this.createLuminanceSource = createLuminanceSource; } /// /// Constructor for additional image formats for one BarcodeReader class /// /// Sets the reader which should be used to find and decode the barcode. /// If null then MultiFormatReader is used /// Sets the function to create a binarizer object for a luminance source. /// If null then HybridBinarizer is used /// Sets the function to create a luminance source object for a rgb raw byte array. protected BarcodeReader(Reader reader, Func createBinarizer, Func createRGBLuminanceSource ) : base(reader, createBinarizer, createRGBLuminanceSource) { } /// /// Optional: Gets or sets the function to create a luminance source object for a bitmap. /// If null a platform specific default LuminanceSource is used /// /// /// The function to create a luminance source object. /// protected Func CreateLuminanceSource { get { return createLuminanceSource; } } /// /// Decodes the specified barcode bitmap. /// /// The barcode bitmap. /// the result data or null public Result Decode(T barcodeBitmap) { if (CreateLuminanceSource == null) { throw new InvalidOperationException("You have to declare a luminance source delegate."); } if (barcodeBitmap == null) throw new ArgumentNullException("barcodeBitmap"); var luminanceSource = CreateLuminanceSource(barcodeBitmap); return Decode(luminanceSource); } /// /// Decodes the specified barcode bitmap. /// /// The barcode bitmap. /// the result data or null public Result[] DecodeMultiple(T barcodeBitmap) { if (CreateLuminanceSource == null) { throw new InvalidOperationException("You have to declare a luminance source delegate."); } if (barcodeBitmap == null) throw new ArgumentNullException("barcodeBitmap"); var luminanceSource = CreateLuminanceSource(barcodeBitmap); return DecodeMultiple(luminanceSource); } } }