一、前言:
最近北京出租車蓄意漲價,各地出租車行業估計也在躍躍欲試了吧。連芙蓉姐姐都正義出擊了,雖然對我來說沒有神馬影響,不過還是要同情一下首都人民。

二、需求調研:
初到一個城市,由於中國同音字很多,經常會遇到一些地方叫不上名字,或者名字叫錯的情況。你上車告訴師傅地方,說不准人家還會笑話你,宰你沒商量。
三、想法(idea):
現在的打車軟件主要的功能是叫車,叫道車后就沒他什么事了。我突發奇想:可不可以把叫車-車上-車下的范圍都納入打車軟件呢。
前段時間搞了一哈二維碼這個東西,覺得不錯。日本人有些東西發明的還是不錯的。雖然只是照搬的條形碼原理,但是已經進步很多了。
叫車就不說了,車下無非就是給司機服務評分之類。現在主要說說車上的事情,還是回到需求:叫不上名字或叫錯名字,怕挨宰。結合二維碼的思想,我們可以在出發前查好地址,然后打車軟件里面生成二維碼,並且共享在打車軟件的服務器里,當然有詳細地址的經緯度等其他必要的信息。上車后你就不用說話了,直接通過藍牙或者其他的東西發到司機的app里面,甚至你可以自己規划路線,計算公里數和費用,做的在一條龍一點:可以在打車軟件里面完成買單,電子支付。
這樣打車軟件才有前途,做的好了,司機的服務質量也會提高,整個行業就互聯網化了,人類也就進步了,我們離理想社會,和諧社會更近了一步不是?
四、解決方案:
1.掃描二維碼:
1.1:Google的開源zxing項目:http://code.google.com/p/zxing/,支持:
- actionscript: partial port to Actionscript
- cpp: Partial C++ port
- iphone: iPhone client + port to Objective C / C++ (QR code only)
- csharp: Partial C# port
1.2:ThroughWork
1.3:web的我當時用的是:http://qrcode.com/
1.4:Windows系統下調用攝像頭:http://www.deepleo.com/archives/1518,下載源代碼
下面貼出關鍵源代碼:
public class CamWorker
{
private const int WM_USER = 0x400;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
private const int WM_CAP_START = WM_USER;
private const int WM_CAP_STOP = WM_CAP_START + 68;
private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
private const int WM_CAP_SAVEDIB = WM_CAP_START + 25;
private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;
private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63;
private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51;
private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;
private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;
private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;
private const int WM_CAP_SET_SCALE = WM_CAP_START + 53;
private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;
private IntPtr hWndC;
private bool bWorkStart = false;
private IntPtr mControlPtr;
private int mWidth;
private int mHeight;
private int mLeft;
private int mTop;
/// <summary>
/// 初始化顯示圖像
/// </summary>
/// <param name= “handle “> 控件的句柄 </param>
/// <param name= “left “> 開始顯示的左邊距 </param>
/// <param name= “top “> 開始顯示的上邊距 </param>
/// <param name= “width “> 要顯示的寬度 </param>
/// <param name= “height “> 要顯示的長度 </param>
public CamWorker(IntPtr handle, int left, int top, int width, int height)
{
mControlPtr = handle;
mWidth = width;
mHeight = height;
mLeft = left;
mTop = top;
}
[DllImport("avicap32.dll ")]
private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
[DllImport("avicap32.dll ")]
private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
//
//這里特別注意,因為WinAPI中的long為32位,而C#中的long為64wei,所以需要將lParam該為int
//
[DllImport("User32.dll ")]
private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);
/// <summary>
/// 開始顯示圖像
/// </summary>
public void Start()
{
if (bWorkStart)
return;
bWorkStart = true;
byte[] lpszName = new byte[100];
hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);
if (hWndC.ToInt32() != 0)
{
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
//Global.log.Write( “SendMessage “);
}
return;
}
/// <summary>
/// 停止顯示
/// </summary>
public void Stop()
{
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bWorkStart = false;
}
/// <summary>
/// 抓圖
/// </summary>
/// <param name= “path “> 要保存bmp文件的路徑 </param>
public void GrabImage(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32());
}
}
1.5:html5(refrence:juery):下載源代碼
其他的,沒時間想了,上班了,以后在做。敬請各位大神板磚。。。
笑話:
一個女人死了,一個男人干掉幾百守衛最后抱走她的是美國電影;一會兒工夫她掙扎着變成吸血鬼的是英國電影;一群人突然冒出來又唱又跳的是印度電影;一個天山雪蓮給她灌進去於是復活了的是香港電影;一個猥瑣男人爬到她身上做活塞運動的是日本電影;一個組織把她追認為組織成員的是中國電影。
加水印:作者:深邃的獅子座
出處:http://www.deepleo.com/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
