分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
这几天开着代理研究android(主要是长期以来 developer.android.com 被墙撞……),总算初步掌握了android的图形处理方式,准备在Blog上写一些经验性的总结。
一、Android Virtual Device仿真界面对应快捷
模拟项 设备键 PC键Home HOMEMenu (left softkey) F2 or Page-up buttonStar (right softkey) Shift-F2 or Page DownBack ESCCall/dial button F3Hangup/end call button F4Search F5Power button F7Audio volume up button KEYPAD_PLUS, Ctrl-5Audio volume down button KEYPAD_MINUS, Ctrl-F6Camera button Ctrl-KEYPAD_5, Ctrl-F3Switch to previous layout orientation (for example, portrait, landscape) KEYPAD_7, F11Switch to next layout orientation (for example, portrait, landscape) KEYPAD_9, F12Toggle cell networking on/off F8Toggle code profiling F9 (only with -trace startup option)Toggle fullscreen mode Alt-EnterToggle trackball mode F6Enter trackball mode temporarily (while key is pressed) DeleteDPad left/up/right/down KEYPAD_4/8/6/2DPad center click KEYPAD_5Onion alpha increase/decrease KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/)
二、要想在View中绘制图形,至少需要用到以下三者
1、Bitmap
Android中使用Bitmap承载图像资源,其默认支持4种图像格式(调用方式,Bitmap.Config.XXXX),分别为ALPHA8、RGB565、ARGB4444、ARGB8888,单就显示效果而言以ARGB8888效果最佳,ALPHA8效果最差,当然占用资源与之相反。
不过Bitmap本身的运算量非常小,其具体操作大量依赖于native,如下所示:
private static native Bitmap nativeCreate(int[] colors, int offset, int stride, int width, int height, int nativeConfig, boolean mutable); private static native Bitmap nativeCopy(int srcBitmap, int nativeConfig, boolean isMutable); private static native void nativeDestructor(int nativeBitmap); private static native void nativeRecycle(int nativeBitmap); private static native boolean nativeCompress(int nativeBitmap, int format, int quality, OutputStream stream, byte[] tempStorage); private static native void nativeErase(int nativeBitmap, int color); private static native int nativeWidth(int nativeBitmap); private static native int nativeHeight(int nativeBitmap); private static native int nativeRowBytes(int nativeBitmap); private static native int nativeConfig(int nativeBitmap); private static native boolean nativeHasAlpha(int nativeBitmap); private static native int nativeGetPixel(int nativeBitmap, int x, int y); private static native void nativeGetPixels(int nativeBitmap, int[] pixels, int offset, int stride, int x, int y, int width, int height); private static native void nativeSetPixel(int nativeBitmap, int x, int y, int color); private static native void nativeSetPixels(int nativeBitmap, int[] colors, int offset, int stride, int x, int y, int width, int height); private static native void nativeCopyPixelsToBuffer(int nativeBitmap, Buffer dst); private static native void nativeCopyPixelsFromBuffer(int nb, Buffer src); private static native Bitmap nativeCreateFromParcel(Parcel p); // returns true on success private static native boolean nativeWriteToParcel(int nativeBitmap, boolean isMutable, Parcel p); // returns a new bitmap built from the native bitmap's alpha, and the paint private static native Bitmap nativeExtractAlpha(int nativeBitmap, int nativePaint, int[] offsetXY);
2、Canvas
Android中使用Canvas对应标准Java应用中的Graphics,其具体操作与Graphics类似,但实际功能却较Graphics为少,需要同Paint配合使用。
与Bitmap近似,Canvas主要实现依赖于OpenGL ES,其本身的运算量非常之小,Canvas本地接口如下所示:
private static native int initRaster(int nativeBitmapOrZero); private static native int initGL(); private static native void native_setBitmap(int nativeCanvas, int bitmap); private static native void nativeSetViewport(int nCanvas, int w, int h); private static native int native_saveLayer(int nativeCanvas, RectF bounds, int paint, int layerFlags); private static native int native_saveLayer(int nativeCanvas, float l, float t, float r, float b, int paint, int layerFlags); private static native int native_saveLayerAlpha(int nativeCanvas, RectF bounds, int alpha, int layerFlags); private static native int native_saveLayerAlpha(int nativeCanvas, float l, float t, float r, float b, int alpha, int layerFlags); private static native void native_concat(int nCanvas, int nMatrix); private static native void native_setMatrix(int nCanvas, int nMatrix); private static native boolean native_clipRect(int nCanvas, float left, float top, float right, float bottom, int regionOp); private static native boolean native_clipPath(int nativeCanvas, int nativePath, int regionOp); private static native boolean native_clipRegion(int nativeCanvas, int nativeRegion, int regionOp); private static native void nativeSetDrawFilter(int nativeCanvas, int nativeFilter); private static nati