00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 using System;
00025 using System.Runtime.InteropServices;
00026
00027 namespace ZBar
00028 {
00033 public class Symbol
00034 {
00041 internal Symbol(IntPtr symbol){
00042 if(symbol == IntPtr.Zero)
00043 throw new Exception("Can't initialize symbol from null pointer.");
00044
00045
00046 IntPtr pData = zbar_symbol_get_data(symbol);
00047 int length = (int)zbar_symbol_get_data_length(symbol);
00048 this.data = Marshal.PtrToStringAnsi(pData, length);
00049
00050
00051 this.type = (SymbolType)zbar_symbol_get_type(symbol);
00052 this.quality = zbar_symbol_get_quality(symbol);
00053 this.count = zbar_symbol_get_count(symbol);
00054 }
00055
00056 private string data;
00057 private int quality;
00058 private int count;
00059 private SymbolType type;
00060
00061 public override string ToString(){
00062 return this.type.ToString() + ": " + this.data;
00063 }
00064
00065 #region Public properties
00066
00076 public int Count{
00077 get{
00078 return this.count;
00079 }
00080 }
00081
00085 public string Data{
00086 get{
00087 return this.data;
00088 }
00089 }
00090
00097 public int Quality{
00098 get{
00099 return this.quality;
00100 }
00101 }
00102
00106 public SymbolType Type{
00107 get{
00108 return this.type;
00109 }
00110 }
00111
00112 #endregion
00113
00114 #region Extern C functions
00127 [DllImport("libzbar")]
00128 private static extern void zbar_symbol_ref(IntPtr symbol, int refs);
00129
00134 [DllImport("libzbar")]
00135 private static extern int zbar_symbol_get_type(IntPtr symbol);
00136
00141 [DllImport("libzbar")]
00142 private static extern IntPtr zbar_symbol_get_data(IntPtr symbol);
00143
00148 [DllImport("libzbar")]
00149 private static extern uint zbar_symbol_get_data_length(IntPtr symbol);
00150
00162 [DllImport("libzbar")]
00163 private static extern int zbar_symbol_get_quality(IntPtr symbol);
00164
00177 [DllImport("libzbar")]
00178 private static extern int zbar_symbol_get_count(IntPtr symbol);
00179
00188 [DllImport("libzbar")]
00189 private static extern uint zbar_symbol_get_loc_size(IntPtr symbol);
00190
00197 [DllImport("libzbar")]
00198 private static extern int zbar_symbol_get_loc_x(IntPtr symbol, uint index);
00199
00206 [DllImport("libzbar")]
00207 private static extern int zbar_symbol_get_loc_y(IntPtr symbol, uint index);
00208
00215 [DllImport("libzbar")]
00216 internal static extern IntPtr zbar_symbol_next(IntPtr symbol);
00217
00227 [DllImport("libzbar")]
00228 private static extern IntPtr zbar_symbol_xml(IntPtr symbol, out IntPtr buffer, out uint buflen);
00229 #endregion
00230 }
00231
00235 [Flags]
00236 public enum SymbolType{
00240 None = 0,
00241
00245 Partial = 1,
00246
00250 EAN8 = 8,
00251
00255 UPCE = 9,
00256
00260 ISBN10 = 10,
00261
00265 UPCA = 12,
00266
00270 EAN13 = 13,
00271
00275 ISBN13 = 14,
00276
00280 I25 = 25,
00281
00285 CODE39 = 39,
00286
00290 PDF417 = 57,
00291
00295 CODE128 = 128,
00296
00300 Symbole = 0x00ff,
00301
00305 Addon2 = 0x0200,
00306
00310 Addon5 = 0x0500,
00311
00315 Addon = 0x0700
00316 }
00317 }