当前位置: 首页 > news >正文

在菲律宾做网站推广怎么样源创派网站建设

在菲律宾做网站推广怎么样,源创派网站建设,建设网站需要备案,网站开发思路对于Zxing开源项目的简化上文已给出#xff0c;源码经过测试且不断修改。众所周知#xff0c;Zxing项目的扫描是横向的#xff0c;这么引用的用户体验确实不好#xff1b;然而盲目的修改会出现拉伸以及样本采集的偏离。所以这里说一下如何将横屏修改为竖屏扫描 解决办法引用…     对于Zxing开源项目的简化上文已给出源码经过测试且不断修改。众所周知Zxing项目的扫描是横向的这么引用的用户体验确实不好然而盲目的修改会出现拉伸以及样本采集的偏离。所以这里说一下如何将横屏修改为竖屏扫描     解决办法引用原文http://blog.csdn.net/aaawqqq/article/details/24804939   一、Zxing扫描框架竖屏切换      1、menifest.xml中Activitiy必须要设为竖屏的添加属性 android:screenOrientationportrait     2、camera扫描过程中有两个视图当前扫描view(取景框)和预览preview。为了修正预览的90度的偏离我们需要修正PreView。因此我们要修改CameraManager中的                        getFramingRectInPreview的preView的边框 1 rect.left rect.left * cameraResolution.y / screenResolution.x; 2 rect.right rect.right * cameraResolution.y / screenResolution.x; 3 rect.top rect.top * cameraResolution.x / screenResolution.y; 4 rect.bottom rect.bottom * cameraResolution.x / screenResolution.y; View Code    3、在CameraConfigurationManager中setDesiredCameraParameters设置我们需要设置的Camera参数设置preView大小因此我们我们需要在这里添加                    setDisplayOrientation来设置camera旋转90度旋转调用位置setDesiredCameraParameters中camera.setParameters(parameters)之前 1 void setDisplayOrientation(Camera camera, int angle) {2 3 Method method;4 try {5 method camera.getClass().getMethod(setDisplayOrientation,6 new Class[] { int.class });7 if (method ! null)8 method.invoke(camera, new Object[] { angle });9 } catch (Exception e1) { 10 e1.printStackTrace(); 11 } 12 } View Code   4、在DecodeHandler中decode(byte[] data, int width, int height)在PlanarYUVLuminanceSource source activity.getCameraManager().buildLuminanceSource(data, width, height)之前添加以下代码防止转化的bitmap与取景框得到的扫描图不一致 1 byte[] rotatedData new byte[data.length]; 2 for (int y 0; y height; y) { 3 for (int x 0; x width; x) 4 rotatedData[x * height height - y - 1] data[x y * width]; 5 } 6 int tmp width; // Here we are swapping, thats the difference to #11 7 width height; 8 height tmp; 9 data rotatedData; View Code   5、在CameraConfigurationManager中initFromCameraParameters(Camera camera)替换为如下代码    1 void initFromCameraParameters(Camera camera) {2 Camera.Parameters parameters camera.getParameters();3 WindowManager manager (WindowManager) context4 .getSystemService(Context.WINDOW_SERVICE);5 Display display manager.getDefaultDisplay();6 Point theScreenResolution new Point(display.getWidth(),7 display.getHeight());8 screenResolution theScreenResolution;9 Log.i(TAG, Screen resolution: screenResolution); 10 11 /************** 竖屏更改4 ******************/ 12 Point screenResolutionForCamera new Point(); 13 screenResolutionForCamera.x screenResolution.x; 14 screenResolutionForCamera.y screenResolution.y; 15 16 // preview size is always something like 480*320, other 320*480 17 if (screenResolution.x screenResolution.y) { 18 screenResolutionForCamera.x screenResolution.y; 19 screenResolutionForCamera.y screenResolution.x; 20 } 21 22 cameraResolution CameraConfigurationUtils.findBestPreviewSizeValue( 23 parameters, screenResolutionForCamera); 24 Log.i(TAG, Camera resolution: cameraResolution); 25 26 } View Code     非常感谢NDK-baozi的解决方法   二、解决自定义取景框的问题       Zxing中在取景框中央的红色扫描线或许跟我们需要的循环移动扫描还有些出入这就需要我们来自定义属于自己的取景框。实现自定义取景框我们需要改写ViewfinderView来绘制自  己的View。       首先需要确定一点在Zxing源代码中有两个Rect:一个是frame通过getFramingRect取得这是我们要的取景框的Rect;而另一个previewFrame则是预览视图。我们要做的是以frame为参照物进行我们自己的绘制。         1、绘制描述的文字也即取景框上方的提示消息       1 private void drawStatusText(Canvas canvas, Rect frame, int width) {2 3 String statusText1 getResources().getString(4 R.string.viewfinderview_status_text1);5 String statusText2 getResources().getString(6 R.string.viewfinderview_status_text2);7 int statusTextSize 45;8 int statusPaddingTop 180;9 10 paint.setColor(statusColor); 11 paint.setTextSize(statusTextSize); 12 13 int textWidth1 (int) paint.measureText(statusText1); 14 canvas.drawText(statusText1, (width - textWidth1) / 2, frame.top 15 - statusPaddingTop, paint); 16 17 int textWidth2 (int) paint.measureText(statusText2); 18 canvas.drawText(statusText2, (width - textWidth2) / 2, frame.top 19 - statusPaddingTop 60, paint); 20 } View Code           2、绘制取景框边角也即四个角的蓝色拐角 1 private void drawFrameBounds(Canvas canvas, Rect frame) {2 3 paint.setColor(Color.WHITE);4 paint.setStrokeWidth(2);5 paint.setStyle(Paint.Style.STROKE);6 7 canvas.drawRect(frame, paint);8 9 paint.setColor(Color.BLUE); 10 paint.setStyle(Paint.Style.FILL); 11 12 int corWidth 15; 13 int corLength 45; 14 15 // 左上角 16 canvas.drawRect(frame.left - corWidth, frame.top, frame.left, frame.top 17 corLength, paint); 18 canvas.drawRect(frame.left - corWidth, frame.top - corWidth, frame.left 19 corLength, frame.top, paint); 20 // 右上角 21 canvas.drawRect(frame.right, frame.top, frame.right corWidth, 22 frame.top corLength, paint); 23 canvas.drawRect(frame.right - corLength, frame.top - corWidth, 24 frame.right corWidth, frame.top, paint); 25 // 左下角 26 canvas.drawRect(frame.left - corWidth, frame.bottom - corLength, 27 frame.left, frame.bottom, paint); 28 canvas.drawRect(frame.left - corWidth, frame.bottom, frame.left 29 corLength, frame.bottom corWidth, paint); 30 // 右下角 31 canvas.drawRect(frame.right, frame.bottom - corLength, frame.right 32 corWidth, frame.bottom, paint); 33 canvas.drawRect(frame.right - corLength, frame.bottom, frame.right 34 corWidth, frame.bottom corWidth, paint); 35 } View Code       3、绘制循环移动的扫描线 1 private void drawScanLight(Canvas canvas, Rect frame) {2 3 if (scanLineTop 0) {4 scanLineTop frame.top;5 }6 7 if (scanLineTop frame.bottom) {8 scanLineTop frame.top;9 } else { 10 scanLineTop SCAN_VELOCITY; 11 } 12 Rect scanRect new Rect(frame.left, scanLineTop, frame.right, 13 scanLineTop 30); 14 canvas.drawBitmap(scanLight, null, scanRect, paint); 15 } View Code        通过以上的三步绘制我们就可以实现展示图的效果。整体的ViewfinderView代码    1 /**2 * This view is overlaid on top of the camera preview. It adds the viewfinder3 * rectangle and partial transparency outside it, as well as the laser scanner4 * animation and result points. 这是一个位于相机顶部的预览view,它增加了一个外部部分透明的取景框以及激光扫描动画和结果组件5 * 6 * author dswitkingoogle.com (Daniel Switkin)7 */8 public final class ViewfinderView extends View {9 10 private static final int[] SCANNER_ALPHA { 0, 64, 128, 192, 255, 192,11 128, 64 };12 private static final long ANIMATION_DELAY 80L;13 private static final int CURRENT_POINT_OPACITY 0xA0;14 private static final int MAX_RESULT_POINTS 20;15 private static final int POINT_SIZE 6;16 17 private CameraManager cameraManager;18 private final Paint paint;19 private Bitmap resultBitmap;20 private final int maskColor; // 取景框外的背景颜色21 private final int resultColor;// result Bitmap的颜色22 private final int laserColor; // 红色扫描线的颜色23 private final int resultPointColor; // 特征点的颜色24 private final int statusColor; // 提示文字颜色25 private int scannerAlpha;26 private ListResultPoint possibleResultPoints;27 private ListResultPoint lastPossibleResultPoints;28 // 扫描线移动的y29 private int scanLineTop;30 // 扫描线移动速度31 private final int SCAN_VELOCITY 5;32 // 扫描线33 Bitmap scanLight;34 35 public ViewfinderView(Context context, AttributeSet attrs) {36 super(context, attrs);37 38 // Initialize these once for performance rather than calling them every39 // time in onDraw().40 paint new Paint(Paint.ANTI_ALIAS_FLAG);41 Resources resources getResources();42 maskColor resources.getColor(R.color.viewfinder_mask);43 resultColor resources.getColor(R.color.result_view);44 laserColor resources.getColor(R.color.viewfinder_laser);45 resultPointColor resources.getColor(R.color.possible_result_points);46 statusColor resources.getColor(R.color.status_text);47 scannerAlpha 0;48 possibleResultPoints new ArrayListResultPoint(5);49 lastPossibleResultPoints null;50 scanLight BitmapFactory.decodeResource(resources,51 R.drawable.scan_light);52 }53 54 public void setCameraManager(CameraManager cameraManager) {55 this.cameraManager cameraManager;56 }57 58 SuppressLint(DrawAllocation)59 Override60 public void onDraw(Canvas canvas) {61 if (cameraManager null) {62 return; // not ready yet, early draw before done configuring63 }64 65 // frame为取景框66 Rect frame cameraManager.getFramingRect();67 Rect previewFrame cameraManager.getFramingRectInPreview();68 if (frame null || previewFrame null) {69 return;70 }71 int width canvas.getWidth();72 int height canvas.getHeight();73 74 // Draw the exterior (i.e. outside the framing rect) darkened75 // 绘制取景框外的暗灰色的表面分四个矩形绘制76 paint.setColor(resultBitmap ! null ? resultColor : maskColor);77 canvas.drawRect(0, 0, width, frame.top, paint);// Rect_178 canvas.drawRect(0, frame.top, frame.left, frame.bottom 1, paint); // Rect_279 canvas.drawRect(frame.right 1, frame.top, width, frame.bottom 1,80 paint); // Rect_381 canvas.drawRect(0, frame.bottom 1, width, height, paint); // Rect_482 83 if (resultBitmap ! null) {84 // Draw the opaque result bitmap over the scanning rectangle85 // 如果有二维码结果的Bitmap在扫取景框内绘制不透明的result Bitmap86 paint.setAlpha(CURRENT_POINT_OPACITY);87 canvas.drawBitmap(resultBitmap, null, frame, paint);88 } else {89 // Draw a red laser scanner line through the middle to show90 // decoding is active91 drawFrameBounds(canvas, frame);92 drawStatusText(canvas, frame, width);93 94 // 绘制扫描线95 // paint.setColor(laserColor);96 // paint.setAlpha(SCANNER_ALPHA[scannerAlpha]);97 // scannerAlpha (scannerAlpha 1) % SCANNER_ALPHA.length;98 // int middle frame.height() / 2 frame.top;99 // canvas.drawRect(frame.left 2, middle - 1, frame.right - 1, 100 // middle 2, paint); 101 102 drawScanLight(canvas, frame); 103 104 float scaleX frame.width() / (float) previewFrame.width(); 105 float scaleY frame.height() / (float) previewFrame.height(); 106 107 // 绘制扫描线周围的特征点 108 ListResultPoint currentPossible possibleResultPoints; 109 ListResultPoint currentLast lastPossibleResultPoints; 110 int frameLeft frame.left; 111 int frameTop frame.top; 112 if (currentPossible.isEmpty()) { 113 lastPossibleResultPoints null; 114 } else { 115 possibleResultPoints new ArrayListResultPoint(5); 116 lastPossibleResultPoints currentPossible; 117 paint.setAlpha(CURRENT_POINT_OPACITY); 118 paint.setColor(resultPointColor); 119 synchronized (currentPossible) { 120 for (ResultPoint point : currentPossible) { 121 canvas.drawCircle(frameLeft 122 (int) (point.getX() * scaleX), frameTop 123 (int) (point.getY() * scaleY), POINT_SIZE, 124 paint); 125 } 126 } 127 } 128 if (currentLast ! null) { 129 paint.setAlpha(CURRENT_POINT_OPACITY / 2); 130 paint.setColor(resultPointColor); 131 synchronized (currentLast) { 132 float radius POINT_SIZE / 2.0f; 133 for (ResultPoint point : currentLast) { 134 canvas.drawCircle(frameLeft 135 (int) (point.getX() * scaleX), frameTop 136 (int) (point.getY() * scaleY), radius, paint); 137 } 138 } 139 } 140 141 // Request another update at the animation interval, but only 142 // repaint the laser line, 143 // not the entire viewfinder mask. 144 postInvalidateDelayed(ANIMATION_DELAY, frame.left - POINT_SIZE, 145 frame.top - POINT_SIZE, frame.right POINT_SIZE, 146 frame.bottom POINT_SIZE); 147 } 148 } 149 150 /** 151 * 绘制取景框边框 152 * 153 * param canvas 154 * param frame 155 */ 156 private void drawFrameBounds(Canvas canvas, Rect frame) { 157 158 paint.setColor(Color.WHITE); 159 paint.setStrokeWidth(2); 160 paint.setStyle(Paint.Style.STROKE); 161 162 canvas.drawRect(frame, paint); 163 164 paint.setColor(Color.BLUE); 165 paint.setStyle(Paint.Style.FILL); 166 167 int corWidth 15; 168 int corLength 45; 169 170 // 左上角 171 canvas.drawRect(frame.left - corWidth, frame.top, frame.left, frame.top 172 corLength, paint); 173 canvas.drawRect(frame.left - corWidth, frame.top - corWidth, frame.left 174 corLength, frame.top, paint); 175 // 右上角 176 canvas.drawRect(frame.right, frame.top, frame.right corWidth, 177 frame.top corLength, paint); 178 canvas.drawRect(frame.right - corLength, frame.top - corWidth, 179 frame.right corWidth, frame.top, paint); 180 // 左下角 181 canvas.drawRect(frame.left - corWidth, frame.bottom - corLength, 182 frame.left, frame.bottom, paint); 183 canvas.drawRect(frame.left - corWidth, frame.bottom, frame.left 184 corLength, frame.bottom corWidth, paint); 185 // 右下角 186 canvas.drawRect(frame.right, frame.bottom - corLength, frame.right 187 corWidth, frame.bottom, paint); 188 canvas.drawRect(frame.right - corLength, frame.bottom, frame.right 189 corWidth, frame.bottom corWidth, paint); 190 } 191 192 /** 193 * 绘制提示文字 194 * 195 * param canvas 196 * param frame 197 * param width 198 */ 199 private void drawStatusText(Canvas canvas, Rect frame, int width) { 200 201 String statusText1 getResources().getString( 202 R.string.viewfinderview_status_text1); 203 String statusText2 getResources().getString( 204 R.string.viewfinderview_status_text2); 205 int statusTextSize 45; 206 int statusPaddingTop 180; 207 208 paint.setColor(statusColor); 209 paint.setTextSize(statusTextSize); 210 211 int textWidth1 (int) paint.measureText(statusText1); 212 canvas.drawText(statusText1, (width - textWidth1) / 2, frame.top 213 - statusPaddingTop, paint); 214 215 int textWidth2 (int) paint.measureText(statusText2); 216 canvas.drawText(statusText2, (width - textWidth2) / 2, frame.top 217 - statusPaddingTop 60, paint); 218 } 219 220 /** 221 * 绘制移动扫描线 222 * 223 * param canvas 224 * param frame 225 */ 226 private void drawScanLight(Canvas canvas, Rect frame) { 227 228 if (scanLineTop 0) { 229 scanLineTop frame.top; 230 } 231 232 if (scanLineTop frame.bottom) { 233 scanLineTop frame.top; 234 } else { 235 scanLineTop SCAN_VELOCITY; 236 } 237 Rect scanRect new Rect(frame.left, scanLineTop, frame.right, 238 scanLineTop 30); 239 canvas.drawBitmap(scanLight, null, scanRect, paint); 240 } 241 242 public void drawViewfinder() { 243 Bitmap resultBitmap this.resultBitmap; 244 this.resultBitmap null; 245 if (resultBitmap ! null) { 246 resultBitmap.recycle(); 247 } 248 invalidate(); 249 } 250 251 /** 252 * Draw a bitmap with the result points highlighted instead of the live 253 * scanning display. 254 * 255 * param barcode 256 * An image of the decoded barcode. 257 */ 258 public void drawResultBitmap(Bitmap barcode) { 259 resultBitmap barcode; 260 invalidate(); 261 } 262 263 public void addPossibleResultPoint(ResultPoint point) { 264 ListResultPoint points possibleResultPoints; 265 synchronized (points) { 266 points.add(point); 267 int size points.size(); 268 if (size MAX_RESULT_POINTS) { 269 // trim it 270 points.subList(0, size - MAX_RESULT_POINTS / 2).clear(); 271 } 272 } 273 } 274 275 } View Code   转载于:https://www.cnblogs.com/kipMeister/p/4123676.html
http://wiki.neutronadmin.com/news/187583/

相关文章:

  • 网站开发与维护项目招标站长工具流量统计
  • 网站空间可以通过什么获取网站的seo
  • 武义做网站广州市网站建设企业
  • 黑龙江恒泰建设集团网站人力外包
  • 2015年全球网站优秀设计师最专业的外贸网站建设公司
  • 做公司网站解析网站开发与设计教程pdf
  • 项目四网站建设内容Python爬取wordpress
  • 上海专业做网站公司电话公司网站建设规划方案
  • 做的网站在ie会乱码成都住建局官网住建蓉e办
  • 网站开发需要申请专利吗娄底网站建设工作室
  • 用帝国cms做网站电脑上无法安装wordpress
  • 深圳市深圳市住房和建设局网站哈尔滨建站哪个好
  • 增长超人做网站多少钱各网站收录
  • 运城市网站建设网站后台的作用
  • 湖北省住房和城乡建设厅网站的公示公告网站被k
  • 长春网站优化实战铜川市新区建设局网站
  • 在线音乐网站开发教程济宁网站建设神华
  • 股票交易平台app排行榜seo综合查询可以关了吗
  • 德国服务器网站搭建一个商城需要多少钱
  • 建设中的网站备案期间做什济南教育加盟网站建设
  • 视频网站建设难吗前端开发岗位职责
  • seo实训总结seo外链网站
  • 沙井网站制作联系电话如何制作动漫网站模板下载
  • 做网站需要什么服务器上海网站推广维新
  • 华强北 网站建设网站建设的基本因素是什么
  • 百度地图手机网站开发中小企业网络拓扑图绘制
  • wordpress在这个站点注册有个能写文章做任务的网站
  • 用淘宝做公司网站青海政企网站建设
  • 互联网网站开发创业计划书设计素材网站情人节
  • 公司建网站搭建服务器网站设计报价怎么做