android入门:zxing学习笔记(一)

对于刚开始学习android开发的童鞋们来说,若有一个简单而又全面的android工程能来剖析,那就是再好不过了,zxing就是不错得例子。
zxing的源码可以到google code上下载,整个源码check out 下来,里面有各个平台的源码,ios的,android的。当然我们需要的就是android代码。
将android的工程导入到eclipse中,导入完成后,eclipse会显示各种错误,这是缺少core文件夹里面的核心库文件所致,在project中创建文件夹core,再将zxing源码中得core文件夹下得代码导入进来,这样就可以了。
如果遇到unable resolved target-X,则是你的avd版本问题,可以在project.propertities修改target值。clean下就ok。
如上的都是zxing android代码分析的准备,下面的则是正式开始。

 如上图:为整个android工程的代码,android入门就重这些代码着手。其中主要关注的是android,camera,encode,result文件夹。
程序启动的流程:加载main activity,在此类中创建CaptureActivityHandler对象,该对象启动相机,实现自动聚焦,创建DecodeThread线程,DecodeThread创建Decodehandler,这个对象就获取从相机得到的原始byte数据,开始解码的第一步工作,从获取的byte中解析qr图来,并解析出qr图中的字符,将这块没有分析的字符抛送到CaptureActivityHandler中handle,该类调用main activity的decode函数完成对字符的分析,最后显示在界面上(刷新UI,最好在UI线程里完成)。这样一个解析qr图的过程并完成。
下面具体分析整个过程。重点之处有main activity,camera.
程序启动的第一个activity便是:CaptureActivity,有点类似于c中的main函数,在此是main activity。这个acitvity做的主要的事便是:加载扫描各种条形码,二维码的一个界面,启动一个处理获取一维码二维码信息的线程,完成对于获取的图像信息进行解码,最后再将解码的信息显示在界面上。

完成界面的加载主要在于onCreate,和onResume函数中,这涉及到了一个activity的生命周期,以后再具体分析。首先调用onCreate,再调用onResume,在onResume中会判断这个activity是由什么启动的,可能是其他的app触发了,也可能是用户直接启动的。这样就初始化了三个变量,一是source,便是启动activity的源,一是decodeFormats,指出解码的方式,是qr,还是其他的等等,最后一个是:charactreset,即是对于这些生成qr图的字符的编码方式。若没有对core中得代码修改,用该程序解析GB2312编码的字符则会乱码。乱码的解决后面将提到。
界面的加载中有两个很关键的类。surfaceview 和 ViewFinderView,前面的是用来加载从底层硬件获取的相机取景的图像,后面的是自定义的view,实现了扫描时的界面,不停的刷新,并将识别的一些数据,如定位的点回调显示在界面上。

android入门:zxing学习笔记(二)

上一篇介绍了zxing扫描二维码的过程,刚开始看这份代码时,不怎么明白,很多细节都不清楚,到后来又了更深的理解后,发现这代码设计的就是好,质量高。整个扫描二维码和一维码的过程是非常迅速的,效率很高。最近发现微博上有个二维坊的ID,发得qr码图形都非常的Q,不知道怎么弄出来的,程序员可以借这个可爱的qr码浪漫下。

在整个zxing的android代码部分,很重要的两点是main activity 和 camera。在这一篇,就主要介绍下android camera的使用。打开zxing下的Barcode scanner,并会有如下的界面。为了更好的理解camera,先介绍这个界面。


 刚开始接触到android时,对此界面一点不熟悉。后面认真看了其中的代码,明白了一点点。 这个界面的定义主要在ViewfinderView.java这个类中,这个类继承了View类,实现了自定义的View。View就是对应于屏幕的一个画布,可以在这个屏幕上任意绘制你想要的设计。最重要的重载onDraw函数,在其中实现绘制。就来看下ViewfinderView是如何实现界面上的感觉的。

画面中一共分为两块:外边半透明的一片,中间全透明的一片。外面半透明的画面是由四个矩形组成。
 paint.setColor(resultBitmap != null ? resultColor : maskColor);canvas.drawRect(0, 0, width, frame.top, paint);canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint);canvas.drawRect(0, frame.bottom + 1, width, height, paint);
drawRect函数有五个参数,前四个参数构成两个坐标,组成一个矩形,后面一个画笔相关的。

中间的全透明一块,也是由四个矩形组成,只是每个矩形很窄,才一两个像素,成了一条直线。
paint.setColor(frameColor);
canvas.drawRect(frame.left, frame.top, frame.right + 1, frame.top + 2, paint);
canvas.drawRect(frame.left, frame.top + 2, frame.left + 2, frame.bottom - 1, paint);
canvas.drawRect(frame.right - 1, frame.top, frame.right + 1, frame.bottom - 1, paint);
canvas.drawRect(frame.left, frame.bottom - 1, frame.right + 1, frame.bottom + 1, paint);
   最中间的一条红色扫描线亦如此。

   onDraw()函数的最后一句是:
postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top, frame.right, frame.bottom);
    这一句很关键,postInvalidateDelayed函数主要用来在非UI线程中刷新UI界面,每个ANIMATION_DELAY时间,刷新指定的范围。所以会不停得调用onDraw函数,并在界面上添加绿色的特征点。在刚开始看这份代码时,没明白是如何添加绿色的标记点的。现在再看了一遍,大致明白了。在camera聚焦获取图片后,再使用core中的库进行解析,会得出特征点的坐标,最后通过ViewfinderResultPointCallback类回调,将特征点添加到ViewfinderView中的ArrayList容器中。
public void foundPossibleResultPoint(ResultPoint point) {viewfinderView.addPossibleResultPoint(point);}
    这个函数特征点加入到possibleResultPoints中,由于对java不熟悉,不知道 “=” 的赋值对于List来说是浅拷贝,总在想possibleResultPoints对象没有被赋值,如何获取这些特征点了。后面才知道,这个“=”赋值,只是个浅拷贝。若要对这种预定义的集合实现深拷贝,可以使用构造函数,

如:List<ResultPoint> points = new List<ResultPoint>(possibleResultPoints);
public void addPossibleResultPoint(ResultPoint point) {List<ResultPoint> points = possibleResultPoints;synchronized (point) {points.add(point);int size = points.size();if (size > MAX_RESULT_POINTS) {// trim itpoints.subList(0, size - MAX_RESULT_POINTS / 2).clear();}}}

如果想深入的查看view刷新的过程,具体实现,查看下面这个链接,这个系列文章写的很详细。

   AndroidBluetooth博客:View编程(2): invalidate()再探

android入门:zxing学习笔记(三)

ViewfinderView自定义了view,实现了一个简洁的扫描界面。这一篇记录我再看代码过程中对于Android Camera 的理解。由于才开始写技术类博客,前两篇有很多不足之处,都是自己随性而写,估计大家很难对我写的有一个清晰的了解。这篇尝试改变下风格,争取好好的表达我的浅薄理解,也让大家能够看懂。

在看Barcode Scanner中关于camera代码前,先对android camera开发做个简单的介绍,算是入门。

首先是使用camera需要用到的权限。

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
如下是一个很简单的camera示例,简单到只能取景,即打开相机,将景象显示在屏幕上,仅此而已。
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;public class CameraTestActivity extends Activity implements SurfaceHolder.Callback {private SurfaceHolder surfaceHolder;private Camera camera;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);surfaceHolder = surfaceView.getHolder();surfaceHolder.addCallback(this);surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {// TODO Auto-generated method stubcamera = Camera.open();Camera.Parameters parameters = camera.getParameters();parameters.setPreviewSize(480, 320); // 设置camera.setParameters(parameters);try {camera.setPreviewDisplay(surfaceHolder);} catch (IOException e) {System.out.println(e.getMessage());}camera.startPreview();}@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {// TODO Auto-generated method stubif (camera != null) {camera.stopPreview();}camera.release();camera = null;}
}
其中的R.id.preview_view如下:
<SurfaceViewandroid:id="@+id/preview_view"android:layout_width="fill_parent"android:layout_height="fill_parent" />

首先这个activity实现了SurfaceHolder.Callback接口,并重写了这个接口的三个方法。

    关于对surfaceHolder,surfaceView,SurfaceHolder.Callback的介绍,请看这里,很详细哦。
http://www.cnblogs.com/bausch/archive/2011/10/20/2219068.html
    surfaceview总之能够获相机硬件捕捉到的数据并显示出来,在上面的代码中,先初始化了surfaceholder对象。并重写了surfaceCreated函数,在这个函数中,完成了对相机打开取景的基本操作。首先是Camera.open()获取一个Camera对象,在初始化一些camera参数,如图像格式,图像预览大小,刷新率等等。在设置预览显示,最后别忘了startPreview,则完成了取景。由于刚开始开发的工程需要将相机的取景设置为竖屏的,Barcode Scanner设置的是横屏的,开始再尝试调整图片显示方向时,我以为是再manifest中重新设置,
android:screenOrientation="landscape"
      将landscape该为portrait,结果却很意外,屏幕是竖着显示了,但是取景后的内容与显示却是横竖相反的,手机竖着取景,显示的却是横着的。不可以简单的通过调整这个参数值来改变方向。后面调用下面这个函数,重新设置了预览照片的显示方向。
camera.setDisplayOrientation(90);
     调整显示方向后,取景终于正常了。但是在后面预览拍照结果时,发现这都是假象,相机底层取景还是横屏的,只是在预览时进行了方向调整,这样还存在一个显示照片拉伸的问题。这个没有深入查看了。
可以看这篇文章,Android Camera小结,写得比我的更全面,实用。
http://www.diybl.com/course/3_program/java/android/20111201/563696.html 

android入门:zxing学习笔记(四)

Camera取景后显示于屏幕上,是个挺简单的过程,但这会出现各种意料不到的问题,例如之前说的屏幕横竖屏与预览图片之间的方向,图片拉伸,还有在Barcode Scanner中,简单的旋转了图片预览方向后,会出现特征点标记错位,等等。

第三篇简单的完成了相机的取景,还没有将取景的图片拍照存储下来。若想实现拍照的效果,则需要实现回调函数:Camera.PreviewCallback接口。接上一篇的代码,在此实现拍照的功能,将图片显示出来。之前一直在看Barcode Scanner的源码,并只是在其代码上修剪。当昨天自己来实现Camera的自动聚焦时,并遇到比较纠结的问题。在不出意外的情况下,Camera的使用还是挺简单的。

先在此贴出代码,最简单,代码经过了测试,正常运行,测试机是HTC MyTouch 3G slide。

需要的权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
整个代码:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.Display;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.widget.ImageView;public class CameraTestActivity extends Activity implements SurfaceHolder.Callback {private static String TAG = CameraTestActivity.class.getSimpleName();private SurfaceHolder surfaceHolder;private Camera camera;private ImageView imageView;private Timer mTimer;private TimerTask mTimerTask;private Camera.AutoFocusCallback mAutoFocusCallBack;private Camera.PreviewCallback previewCallback;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);imageView = (ImageView) findViewById(R.id.image_view);surfaceHolder = surfaceView.getHolder();surfaceHolder.addCallback(this);surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);mAutoFocusCallBack = new Camera.AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {if (success) {// isAutoFocus = true;camera.setOneShotPreviewCallback(previewCallback);Log.d(TAG, "onAutoFocus success");}}};previewCallback = new Camera.PreviewCallback() {@Overridepublic void onPreviewFrame(byte[] data, Camera arg1) {if (data != null){Camera.Parameters parameters = camera.getParameters();int imageFormat = parameters.getPreviewFormat();Log.i("map", "Image Format: " + imageFormat);Log.i("CameraPreviewCallback", "data length:" + data.length);if (imageFormat == ImageFormat.NV21){// get full pictureBitmap image = null;int w = parameters.getPreviewSize().width;int h = parameters.getPreviewSize().height;Rect rect = new Rect(0, 0, w, h); YuvImage img = new YuvImage(data, ImageFormat.NV21, w, h, null);ByteArrayOutputStream baos = new ByteArrayOutputStream();if (img.compressToJpeg(rect, 100, baos)) { image =  BitmapFactory.decodeByteArray(baos.toByteArray(), 0, baos.size());imageView.setImageBitmap(image);}}}}};mTimer = new Timer();mTimerTask = new CameraTimerTask();mTimer.schedule(mTimerTask, 0, 500);}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stub}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {// TODO Auto-generated method stubinitCamera();}@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {// TODO Auto-generated method stubif (camera != null) {camera.stopPreview();camera.release();camera = null;}previewCallback = null;mAutoFocusCallBack = null;}public void initCamera() {camera = Camera.open();Camera.Parameters parameters = camera.getParameters();WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); // 获取当前屏幕管理器对象Display display = wm.getDefaultDisplay(); // 获取屏幕信息的描述类parameters.setPreviewSize(display.getWidth(), display.getHeight());camera.setParameters(parameters);try {camera.setPreviewDisplay(surfaceHolder);} catch (IOException e) {System.out.println(e.getMessage());}camera.startPreview();}class CameraTimerTask extends TimerTask {@Overridepublic void run() {if (camera != null) {camera.autoFocus(mAutoFocusCallBack);}}}
}
与上一篇的简单预览相比,这篇增加了两个内容,一个是自动聚焦,一个是拍照。代码看上去很简单,没多少内容。但不亲自测试下,还会发现不少。
刚开始在Samsung S5570 galaxy mini上测试,总是不能成功的拍照。调试跟踪后,发现自动聚焦总是失败,聚焦失败就没有进行拍照操作。后面并尝试将自动聚焦代码注释掉,直接拍照,发现也是无法显示拍照的结果。之前的PreviewCallback的代码如下:
Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
 这行代码返回的总是null,即bitmap没有成功生成。对这些代码本来就是拿来用,功能实现了,就行,对这些都只是简单的了解,当遇到bug后并百思不得其解。后来在网上几经查找发现原来是BitmapFactory.decodeByteArray只支持一定的格式,camara支持的previewformat格式为NV21,所以在获得bitmap时,需要进行转换。通过YuvImage类来转换成JPEG格式,再显示出来。具体讨论,请点这里。
解决照片的显示问题后,还有一个问题便是自动聚焦失败。上面特意强调了使用的事HTC 的手机测试成功,是因为之前在samsung s5570 上测试总是失败,拿到HTC的那款手机上立马成功。应该是三星的这款手机不支持自动聚焦。之前在这个三星手机上跑过Barcode Scanner,就自以为这手机能够自动聚焦,并一直在查找自己代码的原因。后面在仔细的读了Barcode Scanner的代码后,发现他得处理方式是:
CameraManager.get().requestPreviewFrame(decodeThread.getHandler(), R.id.decode);//实现拍照
CameraManager.get().requestAutoFocus(this, R.id.auto_focus);//实现聚焦
首先实现拍照,再是实现聚焦,并且重载的聚焦回调函数是隔一段时间再次发出聚焦的请求,实现不断的聚焦。
public void onAutoFocus(boolean success, Camera camera) {if (autoFocusHandler != null) {Message message = autoFocusHandler.obtainMessage(autoFocusMessage, success);// Simulate continuous autofocus by sending a focus request every
// AUTOFOCUS_INTERVAL_MS milliseconds.
//Log.d(TAG, "Got auto-focus callback; requesting another");autoFocusHandler.sendMessageDelayed(message, AUTOFOCUS_INTERVAL_MS);autoFocusHandler = null;} else {Log.d(TAG, "Got auto-focus callback, but no handler for it");}}
聚焦于拍照之前没有先后的逻辑关系,聚焦为了拍照更清晰。这样,关于camera取景聚焦拍照的简单过程并如上了。
还有一个关键的点幷是回调函数。以前没有接触java代码,在看到很多接口监听处理的代码时,总是很困惑。譬如一段简单的button:
private final Button.OnClickListener addCardListener = new TextView.OnClickListener() {@Overridepublic void onClick(View v) {//在此实现button点击后的操作}};
 如上的代码实现了点击监听,通过回调函数,当有点击操作时,并执行onClick函数。这就是一个简单的回调函数的使用。
  关于回调函数请看这里,还有回调函数在android中得体现点这里。
大家的分享方便你我。

android入门:zxing学习笔记(五)

莫道君行早,更有早行人。     

Barcode Scanner不只是上面两篇说的这么简单,还有其他处理,如闪光灯,放大处理,最优的预览尺寸等等。这些不影响对代码的理解,知道camera的使用后,开始看看Barcode Scanner是如何高效的进行识别处理的。在android文件夹下,就有一个thread类:DecodeThread,两个handler类:CaptureActivityHandler和DecodeHandler。在没有认真看两个类时,一直以为这两个handler是理所当然的方式,以为自己就知道了。后面发现不是这么简单,尤其是DecodeThread的实现是android中工作线程的经典实现。

在Barcode Scanner中,有着繁多的消息传送,处理的消息的handler也有两个。如何将消息传送到指定的handler中去,从代码上看挺清晰的,将message和指定的handler绑定。前面提到过,在android中有主线程和工作线程之分。Activity这类的main thread,还有自己创建的work thread,如果要更新UI,则需要再main thread中进行处理,可以通过handler来实现消息传递,将消息送到main thread的消息队列去。

Barcode Scanner中有两个Thread 和 两个handler,在这四个类中通过加入这样的语句判断他们thread中得关系:
System.out.println(TAG + "The worker thread id = " +   Thread.currentThread().getId()); //判断线程ID
最后运行的结果:
01-12 02:41:12.594: I/System.out(655): CaptureActivity The main thread id = 1
01-12 02:41:14.605: I/System.out(655): CaptureActivityHandler The handler thread id = 1
01-12 02:41:12.946: I/System.out(655): DecodeThread The worker thread id = 13
01-12 02:41:13.094: I/System.out(655): DecodeHandler The handler thread id = 13

由此可见,这两个handler都分别属于他们的thread。但在创建这两个handler时,有很大的差别。CaptureActivityHandler的创建只是简简单单的new了,没有其他辅助。这就是main activity在创建时,系统默认为它创建一个looper,负责管理该线程的消息循环,取送消息等,不需要额外指定。但对于自己创建的Thread,系统默认是没有为其创建looper的,需要自己为它创建消息循环。

先看下DecodeThread的代码 : 去掉了跟理解线程不相关的代码。

final class DecodeThread extends Thread {public static String TAG = DecodeThread.class.getSimpleName();private final CaptureActivity activity;private Handler handler;private final CountDownLatch handlerInitLatch;//到计数的锁DecodeThread(CaptureActivity activity,Vector<BarcodeFormat> decodeFormats,String characterSet,ResultPointCallback resultPointCallback) {this.activity = activity;handlerInitLatch = new CountDownLatch(1);//从1开始到计数}Handler getHandler() {try {handlerInitLatch.await();//阻塞先等handler被初始化了才能返回结果。改计数锁即等countdown-->0。} catch (InterruptedException ie) {// continue?}return handler;}@Overridepublic void run() {Looper.prepare();handler = new DecodeHandler(activity, hints);handlerInitLatch.countDown();//启动到计数,countdown-1 变成0;System.out.println(TAG + "The worker thread id = " +   Thread.currentThread().getId()); //判断线程IDLooper.loop();}

前面定义了一个CountDownLatch类型变量,该变量为一个倒计数用的锁。用法挺简单,如代码中,先new CountDownLatch(1),计数值为1, handlerInitLatch.countDown(), 开始倒数。handlerInitLatch.await() 若计数值没有变为0,则一直阻塞。直到计数值为0后,才return handler,因此在调用getHandler时不会返回null的handler。

在创建DecodeThread线程的handler时,首先在线程中调用Looper.prepare()来创建消息队列,再创建附于该线程的handler对象,最后调用Looper.loop()进入消息循环,这个这个loop()循环不会立马返回,需要自己主动调用Looper.myLooper().quit()才会返回。这就是自己创建一个工作线程,为其分配一个消息队列,消息循环的简单迅速办法。

前面说到camera的自动聚焦,只是隔断时间定期的不停向CaptureActivityHandler发送自动聚焦请求,这就是一个消息传送:

Message message = autoFocusHandler.obtainMessage(autoFocusMessage, success);
autoFocusHandler.sendMessageDelayed(message, AUTOFOCUS_INTERVAL_MS);
这样创建了消息,隔断时间发送。

 关于Android的消息处理机制,这里有篇更好的文章,请点这里。还有这一篇介绍looper的。这两篇说的更透彻,实用。这还发现一篇巨作。

android入门:zxing学习笔记(六)

我希望你骑着摩托车离开这里,沿着这条河一直到大海边。

已经连续写了五篇zxing的学习笔记了,刚开始写的时候,只是想简简单单的记录下自己在学习android过程积累的点滴,却没想到写着写着变成了好像在向某人诉说自己一点浅薄的理解似的。回头来看这些稚嫩的笔记,发现思维逻辑有点混乱,讲述的杂乱无章,没达要点。不求全面,但求透彻。在写这些随笔的过程,又更多的理解了Barcode scanner的设计,弄懂了之前很多的一知半解,尤其是理所当然的潜在错误认知,所谓的眼高手低。View,Camera,thread,looper我都再次认真的查阅资料,谨慎的看了多遍,当心自己写错,新年我愿慢慢进步。

言归正传。

在使用Barcode Scanner扫描GB2312编码的qr码,扫描结果会出现乱码,无法正常显示。之所以会出现这个问题,我通过跟踪调试后找到在DecodedBitStreamParser类里面完成了对原始的bytes进行了解析,这个代码有很多没明白,通过打日志知道了代码运行的轨迹。通过对二十多张不同编码方式的qr图扫描分析的结果,发现大部分都通过调用decodeByteSegment进行解析,其中会调用函数StringUtils.guessEncoding(byte[] bytes, Hashtablehints)来对编码方式进行猜测,hits中可以指定使用的编码方式,如果没有指定则猜测。 
// For now, merely tries to distinguish ISO-8859-1, UTF-8 and Shift_JIS,
// which should be by far the most common encodings. ISO-8859-1
// should not have bytes in the 0x80 - 0x9F range, while Shift_JIS
// uses this as a first byte of a two-byte character. If we see this
// followed by a valid second byte in Shift_JIS, assume it is Shift_JIS.
// If we see something else in that second byte, we'll make the risky guess
// that it's UTF-8.
 这部分是代码中对编码方式猜测的基本方法。缺少对GB2312的猜测。GB2312使用两个字节来进行编码。第一个字节的范围在(0xB0,0xF7),紧接着的第二个字节的范围在(0xA0,0xF7)。根据GB2312的这个编码规则,可以进行一个简单的判断,解决扫描GB2312编码的qr图乱码问题。
for (int i = 0; i < length; i++) {int value = bytes[i] & 0xFF;if (value > 0x7F)// 如果大于127,则可能是GB2312,就开始判断该字节,和下一个字节{if (value > 0xB0 && value <= 0xF7)// 第一个字节再此范围内,则开始判断第二个自己{int value2 = bytes[i + 1] & 0xFF;if (value2 > 0xA0 && value2 <= 0xF7) {return true;}}}
}
以上是一个简单的判断,通过加入到guesscoding中后可以正确的识别出GB2312编码的qr图。但感觉这样的方法还是比较低效率的,没有真正融合到zxing的源码中。需要再一步的思考。

前面有一篇关于camera旋转的问题,如果将拍照转为竖屏,除了在manifest中指定该activity的方向外,还需要camera.setDisplayOrientation(90),调整预览时的方向。但是camera取的数据还是原来的横屏的朝向,如果在对图片进行分析前没有对图片做一个旋转的操作,则图片最后保存下来,会发现它是横的,并且那些ResultPoint也无法正确的标记出qr图上的特征点。今天看到一个帖子,解决了这个问题,看这个帖子请点这里。

其中最关键的代码是再DecodeHandler.java中得decode函数调用buildLuminanceSource函数前进行如下的一个旋转。
byte[] rotatedData = new byte[data.length];for (int y = 0; y < height; y++) {for (int x = 0; x < width; x++)rotatedData[x * height + height - y - 1] = data[x + y * width];}
 这样就解决了ResultPoint点标记的不正确的问题,当然除了设置方向,旋转数据,还需要调整下view的布局,使扫描框看上去更协调。

原文地址:http://www.cnblogs.com/liuan/


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. python 书籍

    学习《A Byte of Python》,中文译名为《Python简明教程》,全书下来只有100多页,简单干练,通俗易懂,是公认的Python入门教程。我虽然下到了 《Python简明教程》pdf版,但是觉得其中的代码可能是因为译者转换文档类型的原因,格式变得很乱,所以准备尽量阅读英文原版。网络上…...

    2024/4/19 17:28:29
  2. 人工智能的嘴巴——语音合成(Text to Speech | TTS)

    本文首发在——easyAI——人工智能知识库 小白版本 语音合成就是让机器模仿人类说话。即输入一段文字,最终输出一段语音。做个比较,当机器的“脑子”里想到了一段内容时,或者是看到了一段话时,知道哪些字应该怎么读:拆解文字,得到音素的时长、频率变化,就和我们有时拆解…...

    2024/5/10 9:38:06
  3. Heritrix在Windows下的安装,运行

    1 安装 1.1 首要条件 使用Windows XP / 2003 均可。必须有JAVA环境,请自行安装J2SE jre/jdk。我使用的版本是JAVA SE 1.6.0_02。 1.2 下载Heritrix Heritrix的主页:http://crawler.archive.org/ 下载页面:http://crawler.archive.org/…...

    2024/5/10 9:49:44
  4. Python简明教程学习笔记4--数据结构

    列表:可变的数据类型,示例:list=[list]列表综合: listone = [2, 3, 4] listtwo = [2*i for i in listone if i > 2] print listtwo元组:不可变的数据类型,示例:zoo=(zoo) 含有1个项目的元组。你必须在第一个(唯一一个)项目后跟一个逗号,这样Python才能区分元组和…...

    2024/5/10 9:29:40
  5. css部分总结2

    Css2课后总结 css中的一些属性: 1、fond-famliy:选择字体。eg:fond-famliy:方正静蕾简体; 网页显示:显然不是方正静蕾字体显示的,是以默认的字体呈现的,因为我电脑没装该字体,其中一个解决办法是使用备选字体。 eg:fond-famliy:方正静蕾简体,微软雅黑,宋体; 2、c…...

    2024/4/20 1:15:52
  6. ES6、ES7、ES8学习笔记

    ES6 学习文档:http://es6.ruanyifeng.com/ 变量let和const var的问题:可以重复声明,无法限制修改,没有块级作用域,只能用函数包裹限制作用域。 let和const: 1、不能重复声明。 2、都是有块级作用域,在{ }块内声明的,块外无效。 3、let是变量,可以修改。 4、const是常量…...

    2024/5/10 11:24:15
  7. linux公社大量免费的在线android资料

    2011年linux数据库的android在线分享linux公社:开源公社 本文撰写:杨凯专属频道 下载如需密码,详见博客案例:点击我去查看密码 2011年9月12日 21:39 <目录> Android3D 游戏开发教程2011年10月19日 19:53 <目录> AndroidSDK 2.2 + Eclipse开发环境…...

    2024/5/4 9:09:17
  8. 【TTS】关于语音合成技术整理

    最近找到的一些关于TTS的资料TTS(Text To Speech),即语音合成技术,是一种把文本信息转换成语音信号的技术,在汽车导航、机器人以及很多语音软件中都有广泛的应用。几十年的发展,TTS技术已经非常成熟,国际IT巨头们大都进行过专业攻关。对于APPLE DEVELOPER而言,不像Andr…...

    2024/5/6 13:45:37
  9. heritrix 3.2.0 下载

    由于archive.org屏蔽,编译完成版本 http://builds.archive.org/maven2/org/archive/heritrix/heritrix/3.2.0/ 无法下载。 现将dist版本放到github,方便大家下载学习github地址如下: https://github.com/xiamizy/heritrix-package heritrix-3.2.0-dist.tar.gz大小: 31 KB 查…...

    2024/4/12 17:34:25
  10. 简明Python教程学习笔记_6_面向对象编程

    廖雪峰官网 面向对象编程 廖雪峰官网面向对象高级编程简介类和对象是面向对象编程的两个主要方面。类创建一个新类型,而对象这个类的 实例 。这类于你有一个int类型的变量,这存储整数的变量是int类的实例(对象)。类(Class)::用来描述具有相同的属性和方法的对象的集合。…...

    2024/4/16 12:19:39
  11. TTS语音合成的实现

    在.net中要实现语音合成可以利用微软的语音技术,利用微软的这一技术,需要安装Microsoft Speech SDK和语音库,安装之后,调用com中的Microsoft Speech Object Library,即可实现语音合成。 MicrosoftSpeech SDK 5.1的下载地址:SDK 5.1 下载, 这里SDK 5.1 语言包,这里SDK 5…...

    2024/5/6 11:39:28
  12. Android Studio中配置及使用OpenCV示例(一)

    Android Studio配置及使用OpenCV前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资料参考及学习,很感谢前人留下的总结及经验。关于在AS中使用jni及配置OpenCV也研究了一段时间,怕日后忘记便…...

    2024/4/18 10:47:14
  13. gulp使用心得(安装编译es6文件)

    1.全局安装gulp输入npm install gulp -g命令,然后用 gulp -v查看是否安装完成;2.新建package.json文件进入你的本地项目(我的是F:\shijiebei\apps\Apps.Web),输入npm init命令,其中 name, version, description必填,其他无所谓,填完后保存,在testgulp项目下就会生成pa…...

    2024/4/19 4:35:28
  14. CSS样式字体设置失效,呈现乱码

    1.问题: CSS文件中已设置了标签的属性font-family:"微软雅黑",但是字体的显示的效果却是宋体,查看一下网页源代码,发现设置的字体为乱码。 乱码显示如font-family:"΢���ź�" ; 2.解决方法: 字体设置不要用中文:如font-family:"微软雅黑&qu…...

    2024/4/13 2:19:18
  15. Heritrix源码之 处理链

    heritrix源码真不是一般的复杂,但是一点一点解析的话还是能看懂的处理链是heritrix里面最重要的地方之一,对页面的操作都通过处理链完成,其配置的灵活程度和通用性十分强大。别的程序也可以借鉴哦~~~ProcessorChainList 处理器链集合,包含多个处理器链,每个URL都会有这样一个…...

    2024/4/12 17:34:15
  16. Python:TTS语音合成技术,市场各大平台对比以及实现

    前景提要:在线的实时合成TTS技术,巴拉巴拉... 此处省略3千字 市场的TTS平台:讯飞科技,百度智能语音开放平台,阿里云,腾讯云,思必驰,捷通华声(灵云TTS的合成简单来说就三大步: 1️⃣创建应用 2️⃣发起请求 3️⃣解析音频数据,合成音频文件咱们废话不说一个一个来: 一…...

    2024/5/6 9:11:32
  17. python简明教程学习笔记2--函数

    定义:def func(x): 可以使用同一个global语句指定多个全局变量。例如globalx, y, z。 默认参数值:def say(message, times = 1):只有在形参表末尾的那些参数可以有默认参数值。 return语句 除非你提供你自己的return语句,每个函数都在结尾暗含有returnNone语句。 Pass语句…...

    2024/4/18 15:40:09
  18. Android属性动画完全解析(上),初识属性动画的基本用法

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43536355在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧…...

    2024/4/19 18:14:57
  19. ES6标准--Great Progress

    这三个月我又自学了jQuery库和ES6语法,敲了大量的代码去练习。因为需要一边写论文一边自学这些前端的知识,所以进度可能有点慢,但我觉得能一直坚持每天学一点也是一种毅力,在这里想分享一下看完这两者的心得体会。jQuery库---现在已经不流行强调的理念是write less,do more…...

    2024/4/17 10:38:13
  20. 曾经的中国之光「北大方正」破产了...

    点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!记者 | 乔麦来源 | 中国基金报(chinafundnews)体量超3000亿的中国最大校企方正集团,债务危机迎来新进展。日前,方正集团旗下6家上市公司齐发提示性公告表示,北京银行申请对方正集团重整。…...

    2024/5/6 7:12:26

最新文章

  1. pytorch中统计一个数在tensor中出现了几次

    pytorch中统计一个数在tensor中出现了几次 在PyTorch中&#xff0c;可以使用torch.eq()函数配合torch.sum()来统计某个数值在Tensor中出现的次数。torch.eq()函数会返回一个新的Tensor&#xff0c;其中对于每个元素来说&#xff0c;如果和指定的数值相等&#xff0c;则该位置为…...

    2024/5/10 18:03:29
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/9 21:23:04
  3. 北航2023年考研机试题

    【问题描述】一共6个手机基站&#xff0c;具有记录手机连接基站的能力&#xff0c;6个手机基站分别为ABCDEF&#xff0c;他们具有自己的覆盖范围且任何两个基站的覆盖范围不想交&#xff0c;基站保存的手机登陆日志包括手机号&#xff08;11位&#xff0c;用字符串保存&#xf…...

    2024/5/5 8:38:20
  4. 巨控科技新品发布:全方位升级,引领智能控制新纪元

    标签: #巨控科技 #智能控制 #新品发布 #GRM560 #OPC560 #NET400 在智能控制领域&#xff0c;巨控科技始终以其前沿技术和创新产品引领着市场的潮流。近日&#xff0c;巨控科技再次以其行业领先的研发实力&#xff0c;推出了三大系列的新产品&#xff0c;旨在为各行各业提供更…...

    2024/5/10 0:23:39
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/10 12:36:12
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/9 15:10:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/9 4:20:59
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/4 23:54:56
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/10 10:22:18
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/9 17:11:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57