文字绘制主要包括编码转换(主要是中文)、字形解析(点线或image)和实际渲染三个步骤。在这个过程中,字形解析和实际渲染均是耗时步骤。Skia对文字解析的结果做了一套缓存机制。在中文字较多,使用多种字体,绘制的样式(粗/斜体)有变化时,这个缓存会变得很大,因此Skia文字缓存做了内存上的限制。

1、SkPaint

文字绘制与SkPaint的属性相关很大,先回头看下SkPaint相关的属性

class SkPaint
{
privateSkTypeface*     fTypeface;//字体SkPathEffect*   fPathEffect;//路径绘制效果SkShader*       fShader;//取色器SkXfermode*     fXfermode;//混合模式,类似OpenGL里面的Blend设置SkColorFilter*  fColorFilter;//图像绘制时,自定义图像采样函数时使用SkMaskFilter*   fMaskFilter;//路径绘制时,按有无像素做进一步自定义改进处理时使用SkRasterizer*   fRasterizer;//路径绘制时自定义生成像素点的算法时使用SkDrawLooper*   fLooper;//循环绘制,SkCanvas里面的第二重循环,一般不用关注SkImageFilter*  fImageFilter;//SkCanvas的第一重循环,绘制后做后处理用,一般不用关注SkAnnotation*   fAnnotation;//暂时没用到的属性SkScalar        fTextSize;//文字大小SkScalar        fTextScaleX;//文字水平方向上的拉伸,仅用于PDF绘制SkScalar        fTextSkewX;//文字横向扭曲度,仅用于PDF绘制SkColor         fColor;//纯色,在fShader为空时使用SkScalar        fWidth;//带边界时(kStroke_Style/kStrokeAndFill_Style)生效,边界的宽度 SkScalar        fMiterLimit;//drawPath时,连接各个path片断时,要求的圆滑连接阈值,Join 类型为默认的kMiter_Join时无效/*一组不超过32位的属性*/union {struct {// all of these bitfields should add up to 32unsigned        fFlags : 16;//包含所有的0/1二值属性:/*kAntiAlias_Flag       = 0x01,//是否抗锯齿kDither_Flag          = 0x04,//是否做抖动处理kUnderlineText_Flag   = 0x08,//是否绘制文字下划线kStrikeThruText_Flag  = 0x10,//目前未看到其作用kFakeBoldText_Flag    = 0x20,kLinearText_Flag      = 0x40,kSubpixelText_Flag    = 0x80,//文字像素精确采样kDevKernText_Flag     = 0x100kLCDRenderText_Flag   = 0x200kEmbeddedBitmapText_Flag = 0x400,kAutoHinting_Flag     = 0x800,kVerticalText_Flag    = 0x1000,//是否竖向绘制文字kGenA8FromLCD_Flag    = 0x2000,kDistanceFieldTextTEMP_Flag = 0x4000,kAllFlags = 0xFFFF*/unsigned        fTextAlign : 2;//文字对齐方式,取值如下:/*enum Align {kLeft_Align,//左对齐kCenter_Align,//居中kRight_Align,//右对齐};*/unsigned        fCapType : 2;//边界连接类型,分无连接,圆角连接,半方形连接unsigned        fJoinType : 2;//Path片断连接类型unsigned        fStyle : 2;//绘制模式,填充边界/区域/*enum Style {kFill_Style, //填充区域kStroke_Style,//绘制边界kStrokeAndFill_Style,//填充区域并绘制边界};*/unsigned        fTextEncoding : 2;//文字编码格式,支持如下几种enum TextEncoding {kUTF8_TextEncoding,//utf-8,默认格式kUTF16_TextEncoding,kUTF32_TextEncoding,kGlyphID_TextEncoding};unsigned        fHinting : 2;unsigned        fFilterLevel : 2;//在图像绘制时提到的采样质量要求//unsigned      fFreeBits : 2;};uint32_t fBitfields;};uint32_t fDirtyBits;//记录哪些属性被改变了,以便更新相关的缓存
};

2、字体绘制基本流程


SkCanvas
绘制文字和下划线

SkDraw

两种绘制方式:

(1)将文字解析为路径,然后绘制路径,缓存路径(drawText_asPaths)。

void SkDraw::drawText_asPaths(const char text[], size_t byteLength,SkScalar x, SkScalar y,const SkPaint& paint) const {SkDEBUGCODE(this->validate();)SkTextToPathIter iter(text, byteLength, paint, true);SkMatrix    matrix;matrix.setScale(iter.getPathScale(), iter.getPathScale());matrix.postTranslate(x, y);const SkPath* iterPath;SkScalar xpos, prevXPos = 0;while (iter.next(&iterPath, &xpos)) {matrix.postTranslate(xpos - prevXPos, 0);if (iterPath) {const SkPaint& pnt = iter.getPaint();if (fDevice) {fDevice->drawPath(*this, *iterPath, pnt, &matrix, false);} else {this->drawPath(*iterPath, pnt, &matrix, false);}}prevXPos = xpos;}
}

(2)将文字解析为Mask(32*32的A8图片),然后绘制模板,缓存模板。

    SkDrawCacheProc glyphCacheProc = paint.getDrawCacheProc();SkAutoGlyphCache    autoCache(paint, &fDevice->fLeakyProperties, fMatrix);SkGlyphCache*       cache = autoCache.getCache();// transform our starting point{SkPoint loc;fMatrix->mapXY(x, y, &loc);x = loc.fX;y = loc.fY;}// need to measure firstif (paint.getTextAlign() != SkPaint::kLeft_Align) {SkVector    stop;measure_text(cache, glyphCacheProc, text, byteLength, &stop);SkScalar    stopX = stop.fX;SkScalar    stopY = stop.fY;if (paint.getTextAlign() == SkPaint::kCenter_Align) {stopX = SkScalarHalf(stopX);stopY = SkScalarHalf(stopY);}x -= stopX;y -= stopY;}const char* stop = text + byteLength;SkAAClipBlitter     aaBlitter;SkAutoBlitterChoose blitterChooser;SkBlitter*          blitter = NULL;if (needsRasterTextBlit(*this)) {blitterChooser.choose(*fBitmap, *fMatrix, paint);blitter = blitterChooser.get();if (fRC->isAA()) {aaBlitter.init(blitter, &fRC->aaRgn());blitter = &aaBlitter;}}SkAutoKern          autokern;SkDraw1Glyph        d1g;SkDraw1Glyph::Proc  proc = d1g.init(this, blitter, cache, paint);SkFixed fxMask = ~0;SkFixed fyMask = ~0;if (cache->isSubpixel()) {SkAxisAlignment baseline = SkComputeAxisAlignmentForHText(*fMatrix);if (kX_SkAxisAlignment == baseline) {fyMask = 0;d1g.fHalfSampleY = SK_FixedHalf;} else if (kY_SkAxisAlignment == baseline) {fxMask = 0;d1g.fHalfSampleX = SK_FixedHalf;}}SkFixed fx = SkScalarToFixed(x) + d1g.fHalfSampleX;SkFixed fy = SkScalarToFixed(y) + d1g.fHalfSampleY;while (text < stop) {const SkGlyph& glyph = glyphCacheProc(cache, &text, fx & fxMask, fy & fyMask);fx += autokern.adjust(glyph);if (glyph.fWidth) {proc(d1g, fx, fy, glyph);}fx += glyph.fAdvanceX;fy += glyph.fAdvanceY;}

cacheProc是翻译字符编码的函数,由SkPaint::getDrawCacheProc产生:

SkDrawCacheProc SkPaint::getDrawCacheProc() const {static const SkDrawCacheProc gDrawCacheProcs[] = {sk_getMetrics_utf8_00,sk_getMetrics_utf16_00,sk_getMetrics_utf32_00,sk_getMetrics_glyph_00,sk_getMetrics_utf8_xy,sk_getMetrics_utf16_xy,sk_getMetrics_utf32_xy,sk_getMetrics_glyph_xy};unsigned index = this->getTextEncoding();if (fFlags & kSubpixelText_Flag) {index += 4;}SkASSERT(index < SK_ARRAY_COUNT(gDrawCacheProcs));return gDrawCacheProcs[index];
}

SkGlyphCache:

字形解析的结果缓存。

SkScalerContext:

负责字形的解析,有多种实现。Android中是用FreeType:SkScalerContext_FreeType。主要是generateImage和generatePath两个方法:

generateImage:

void SkScalerContext_FreeType::generateImage(const SkGlyph& glyph) {SkAutoMutexAcquire  ac(gFTMutex);FT_Error    err;if (this->setupSize()) {goto ERROR;}err = FT_Load_Glyph( fFace, glyph.getGlyphID(fBaseGlyphCount), fLoadGlyphFlags);if (err != 0) {SkDEBUGF(("SkScalerContext_FreeType::generateImage: FT_Load_Glyph(glyph:%d width:%d height:%d rb:%d flags:%d) returned 0x%x\n",glyph.getGlyphID(fBaseGlyphCount), glyph.fWidth, glyph.fHeight, glyph.rowBytes(), fLoadGlyphFlags, err));ERROR:memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight);return;}emboldenIfNeeded(fFace, fFace->glyph);generateGlyphImage(fFace, glyph);
}
void SkScalerContext_FreeType_Base::generateGlyphImage(FT_Face face, const SkGlyph& glyph) {const bool doBGR = SkToBool(fRec.fFlags & SkScalerContext::kLCD_BGROrder_Flag);const bool doVert = SkToBool(fRec.fFlags & SkScalerContext::kLCD_Vertical_Flag);switch ( face->glyph->format ) {case FT_GLYPH_FORMAT_OUTLINE: {FT_Outline* outline = &face->glyph->outline;FT_BBox     bbox;FT_Bitmap   target;int dx = 0, dy = 0;if (fRec.fFlags & SkScalerContext::kSubpixelPositioning_Flag) {dx = SkFixedToFDot6(glyph.getSubXFixed());dy = SkFixedToFDot6(glyph.getSubYFixed());// negate dy since freetype-y-goes-up and skia-y-goes-downdy = -dy;}FT_Outline_Get_CBox(outline, &bbox);/*what we really want to do for subpixel isoffset(dx, dy)compute_boundsoffset(bbox & !63)but that is two calls to offset, so we do the following, whichachieves the same thing with only one offset call.*/FT_Outline_Translate(outline, dx - ((bbox.xMin + dx) & ~63),dy - ((bbox.yMin + dy) & ~63));if (SkMask::kLCD16_Format == glyph.fMaskFormat) {FT_Render_Glyph(face->glyph, doVert ? FT_RENDER_MODE_LCD_V : FT_RENDER_MODE_LCD);SkMask mask;glyph.toMask(&mask);if (fPreBlend.isApplicable()) {copyFT2LCD16<true>(face->glyph->bitmap, mask, doBGR,fPreBlend.fR, fPreBlend.fG, fPreBlend.fB);} else {copyFT2LCD16<false>(face->glyph->bitmap, mask, doBGR,fPreBlend.fR, fPreBlend.fG, fPreBlend.fB);}} else {target.width = glyph.fWidth;target.rows = glyph.fHeight;target.pitch = glyph.rowBytes();target.buffer = reinterpret_cast<uint8_t*>(glyph.fImage);target.pixel_mode = compute_pixel_mode( (SkMask::Format)fRec.fMaskFormat);target.num_grays = 256;memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight);FT_Outline_Get_Bitmap(face->glyph->library, outline, &target);}} break;case FT_GLYPH_FORMAT_BITMAP: {FT_Pixel_Mode pixel_mode = static_cast<FT_Pixel_Mode>(face->glyph->bitmap.pixel_mode);SkMask::Format maskFormat = static_cast<SkMask::Format>(glyph.fMaskFormat);// Assume that the other formats do not exist.SkASSERT(FT_PIXEL_MODE_MONO == pixel_mode ||FT_PIXEL_MODE_GRAY == pixel_mode ||FT_PIXEL_MODE_BGRA == pixel_mode);// These are the only formats this ScalerContext should request.SkASSERT(SkMask::kBW_Format == maskFormat ||SkMask::kA8_Format == maskFormat ||SkMask::kARGB32_Format == maskFormat ||SkMask::kLCD16_Format == maskFormat);if (fRec.fFlags & SkScalerContext::kEmbolden_Flag &&!(face->style_flags & FT_STYLE_FLAG_BOLD)){FT_GlyphSlot_Own_Bitmap(face->glyph);FT_Bitmap_Embolden(face->glyph->library, &face->glyph->bitmap,kBitmapEmboldenStrength, 0);}// If no scaling needed, directly copy glyph bitmap.if (glyph.fWidth == face->glyph->bitmap.width &&glyph.fHeight == face->glyph->bitmap.rows &&glyph.fTop == -face->glyph->bitmap_top &&glyph.fLeft == face->glyph->bitmap_left){SkMask dstMask;glyph.toMask(&dstMask);copyFTBitmap(face->glyph->bitmap, dstMask);break;}// Otherwise, scale the bitmap.// Copy the FT_Bitmap into an SkBitmap (either A8 or ARGB)SkBitmap unscaledBitmap;unscaledBitmap.allocPixels(SkImageInfo::Make(face->glyph->bitmap.width,face->glyph->bitmap.rows,SkColorType_for_FTPixelMode(pixel_mode),kPremul_SkAlphaType));SkMask unscaledBitmapAlias;unscaledBitmapAlias.fImage = reinterpret_cast<uint8_t*>(unscaledBitmap.getPixels());unscaledBitmapAlias.fBounds.set(0, 0, unscaledBitmap.width(), unscaledBitmap.height());unscaledBitmapAlias.fRowBytes = unscaledBitmap.rowBytes();unscaledBitmapAlias.fFormat = SkMaskFormat_for_SkColorType(unscaledBitmap.colorType());copyFTBitmap(face->glyph->bitmap, unscaledBitmapAlias);// Wrap the glyph's mask in a bitmap, unless the glyph's mask is BW or LCD.// BW requires an A8 target for resizing, which can then be down sampled.// LCD should use a 4x A8 target, which will then be down sampled.// For simplicity, LCD uses A8 and is replicated.int bitmapRowBytes = 0;if (SkMask::kBW_Format != maskFormat && SkMask::kLCD16_Format != maskFormat) {bitmapRowBytes = glyph.rowBytes();}SkBitmap dstBitmap;dstBitmap.setInfo(SkImageInfo::Make(glyph.fWidth, glyph.fHeight,SkColorType_for_SkMaskFormat(maskFormat),kPremul_SkAlphaType),bitmapRowBytes);if (SkMask::kBW_Format == maskFormat || SkMask::kLCD16_Format == maskFormat) {dstBitmap.allocPixels();} else {dstBitmap.setPixels(glyph.fImage);}// Scale unscaledBitmap into dstBitmap.SkCanvas canvas(dstBitmap);canvas.clear(SK_ColorTRANSPARENT);canvas.scale(SkIntToScalar(glyph.fWidth) / SkIntToScalar(face->glyph->bitmap.width),SkIntToScalar(glyph.fHeight) / SkIntToScalar(face->glyph->bitmap.rows));SkPaint paint;paint.setFilterLevel(SkPaint::kMedium_FilterLevel);canvas.drawBitmap(unscaledBitmap, 0, 0, &paint);// If the destination is BW or LCD, convert from A8.if (SkMask::kBW_Format == maskFormat) {// Copy the A8 dstBitmap into the A1 glyph.fImage.SkMask dstMask;glyph.toMask(&dstMask);packA8ToA1(dstMask, dstBitmap.getAddr8(0, 0), dstBitmap.rowBytes());} else if (SkMask::kLCD16_Format == maskFormat) {// Copy the A8 dstBitmap into the LCD16 glyph.fImage.uint8_t* src = dstBitmap.getAddr8(0, 0);uint16_t* dst = reinterpret_cast<uint16_t*>(glyph.fImage);for (int y = dstBitmap.height(); y --> 0;) {for (int x = 0; x < dstBitmap.width(); ++x) {dst[x] = grayToRGB16(src[x]);}dst = (uint16_t*)((char*)dst + glyph.rowBytes());src += dstBitmap.rowBytes();}}} break;default:SkDEBUGFAIL("unknown glyph format");memset(glyph.fImage, 0, glyph.rowBytes() * glyph.fHeight);return;}// We used to always do this pre-USE_COLOR_LUMINANCE, but with colorlum,
// it is optional
#if defined(SK_GAMMA_APPLY_TO_A8)if (SkMask::kA8_Format == glyph.fMaskFormat && fPreBlend.isApplicable()) {uint8_t* SK_RESTRICT dst = (uint8_t*)glyph.fImage;unsigned rowBytes = glyph.rowBytes();for (int y = glyph.fHeight - 1; y >= 0; --y) {for (int x = glyph.fWidth - 1; x >= 0; --x) {dst[x] = fPreBlend.fG[dst[x]];}dst += rowBytes;}}
#endif
}
generatePath:

void SkScalerContext_FreeType::generatePath(const SkGlyph& glyph,SkPath* path) {SkAutoMutexAcquire  ac(gFTMutex);SkASSERT(&glyph && path);if (this->setupSize()) {path->reset();return;}uint32_t flags = fLoadGlyphFlags;flags |= FT_LOAD_NO_BITMAP; // ignore embedded bitmaps so we're sure to get the outlineflags &= ~FT_LOAD_RENDER;   // don't scan convert (we just want the outline)FT_Error err = FT_Load_Glyph( fFace, glyph.getGlyphID(fBaseGlyphCount), flags);if (err != 0) {SkDEBUGF(("SkScalerContext_FreeType::generatePath: FT_Load_Glyph(glyph:%d flags:%d) returned 0x%x\n",glyph.getGlyphID(fBaseGlyphCount), flags, err));path->reset();return;}emboldenIfNeeded(fFace, fFace->glyph);generateGlyphPath(fFace, path);// The path's origin from FreeType is always the horizontal layout origin.// Offset the path so that it is relative to the vertical origin if needed.if (fRec.fFlags & SkScalerContext::kVertical_Flag) {FT_Vector vector;vector.x = fFace->glyph->metrics.vertBearingX - fFace->glyph->metrics.horiBearingX;vector.y = -fFace->glyph->metrics.vertBearingY - fFace->glyph->metrics.horiBearingY;FT_Vector_Transform(&vector, &fMatrix22);path->offset(SkFDot6ToScalar(vector.x), -SkFDot6ToScalar(vector.y));}
}


3、字体缓存管理
SkTypeface是Skia中的字体类,对应可有多种字体库解析实现。
由于Android上面使用的是FreeType,因此也只讲FreeType分支。
FreeType的使用方法可参考:http://blog.csdn.net/furtherchan/article/details/8667884
字体建立的代码如下:
SkTypeface* SkTypeface::CreateFromStream(SkStream* stream) {return SkFontHost::CreateTypefaceFromStream(stream);
}bool find_name_and_attributes(SkStream* stream, SkString* name,SkTypeface::Style* style, bool* isFixedPitch) {FT_Library  library;if (FT_Init_FreeType(&library)) {return false;}FT_Open_Args    args;memset(&args, 0, sizeof(args));const void* memoryBase = stream->getMemoryBase();FT_StreamRec    streamRec;if (NULL != memoryBase) {args.flags = FT_OPEN_MEMORY;args.memory_base = (const FT_Byte*)memoryBase;args.memory_size = stream->getLength();} else {memset(&streamRec, 0, sizeof(streamRec));streamRec.size = stream->getLength();streamRec.descriptor.pointer = stream;streamRec.read  = sk_stream_read;streamRec.close = sk_stream_close;args.flags = FT_OPEN_STREAM;args.stream = &streamRec;}FT_Face face;if (FT_Open_Face(library, &args, 0, &face)) {FT_Done_FreeType(library);return false;}int tempStyle = SkTypeface::kNormal;if (face->style_flags & FT_STYLE_FLAG_BOLD) {tempStyle |= SkTypeface::kBold;}if (face->style_flags & FT_STYLE_FLAG_ITALIC) {tempStyle |= SkTypeface::kItalic;}if (name) {name->set(face->family_name);}if (style) {*style = (SkTypeface::Style) tempStyle;}if (isFixedPitch) {*isFixedPitch = FT_IS_FIXED_WIDTH(face);}FT_Done_Face(face);FT_Done_FreeType(library);return true;
}



对于Android,在系统初始化时,所有字体文件在预加载时即被解析,包装为SkFaceRec,存为一个全局链表。(frameworks/base/graphic 和 frameworks/base/core/jni目录下面的代码)

public class Typeface {/*.......*/private static void init() {// Load font config and initialize Minikin stateFile systemFontConfigLocation = getSystemFontConfigLocation();File configFilename = new File(systemFontConfigLocation, FONTS_CONFIG);try {FileInputStream fontsIn = new FileInputStream(configFilename);FontListParser.Config fontConfig = FontListParser.parse(fontsIn);List<FontFamily> familyList = new ArrayList<FontFamily>();// Note that the default typeface is always present in the fallback list;// this is an enhancement from pre-Minikin behavior.for (int i = 0; i < fontConfig.families.size(); i++) {Family f = fontConfig.families.get(i);if (i == 0 || f.name == null) {familyList.add(makeFamilyFromParsed(f));}}sFallbackFonts = familyList.toArray(new FontFamily[familyList.size()]);setDefault(Typeface.createFromFamilies(sFallbackFonts));Map<String, Typeface> systemFonts = new HashMap<String, Typeface>();for (int i = 0; i < fontConfig.families.size(); i++) {Typeface typeface;Family f = fontConfig.families.get(i);if (f.name != null) {if (i == 0) {// The first entry is the default typeface; no sense in// duplicating the corresponding FontFamily.typeface = sDefaultTypeface;} else {FontFamily fontFamily = makeFamilyFromParsed(f);FontFamily[] families = { fontFamily };typeface = Typeface.createFromFamiliesWithDefault(families);}systemFonts.put(f.name, typeface);}}for (FontListParser.Alias alias : fontConfig.aliases) {Typeface base = systemFonts.get(alias.toName);Typeface newFace = base;int weight = alias.weight;if (weight != 400) {newFace = new Typeface(nativeCreateWeightAlias(base.native_instance, weight));}systemFonts.put(alias.name, newFace);}sSystemFontMap = systemFonts;} catch (RuntimeException e) {Log.w(TAG, "Didn't create default family (most likely, non-Minikin build)", e);// TODO: normal in non-Minikin case, remove or make error when Minikin-only} catch (FileNotFoundException e) {Log.e(TAG, "Error opening " + configFilename);} catch (IOException e) {Log.e(TAG, "Error reading " + configFilename);} catch (XmlPullParserException e) {Log.e(TAG, "XML parse exception for " + configFilename);}}static {init();// Set up defaults and typefaces exposed in public APIDEFAULT         = create((String) null, 0);DEFAULT_BOLD    = create((String) null, Typeface.BOLD);SANS_SERIF      = create("sans-serif", 0);SERIF           = create("serif", 0);MONOSPACE       = create("monospace", 0);sDefaults = new Typeface[] {DEFAULT,DEFAULT_BOLD,create((String) null, Typeface.ITALIC),create((String) null, Typeface.BOLD_ITALIC),};}/*......*/
}


SkTypeface 记录一个字体的id,在使用时,到链表中查出相关的字体。

对一个字体和样式,建一个 SkGlyphCache缓存,内含一个 SkScalerContext 和一个 SkGlyph 的哈希表,SkGlyph 缓存一个字体中一个字解析出来的位图。此有内存容量限制,当超过容量时,会清除之前缓存的位图。Hash冲突时,直接生成新字形替换原来的字形。

缓存限制的内存宏详见:src/core/SkGlyphCache_Globals.h。和include/core/SkUserConfig.h中的SK_DEFAULT_FONT_CACHE_LIMIT宏

struct SkGlyph {void*       fImage;SkPath*     fPath;SkFixed     fAdvanceX, fAdvanceY;uint32_t    fID;uint16_t    fWidth, fHeight;int16_t     fTop, fLeft;void*       fDistanceField;uint8_t     fMaskFormat;int8_t      fRsbDelta, fLsbDelta;  // used by auto-kerning
};


当绘制字体只绘边界或者位图缓存机制不好处理时,将字体解析成点线,构成SkPath,也做缓存。




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

相关文章

  1. QuickField 4.2

    Ansoft Hfss v13.0-ISO CADWorx.V2010(Equipment,P&ID,Plant) Crocodile Physics 605 (物理教学仿真) Mentor.Graphics.Precision.RTL.Synthesis.v2010a.218.Win32 Plaxis Professional v8.5 1CD QuickField 4.2 Schlumberger GeoFrame 4.3 Linux-ISO 7CD完整好用(油…...

    2024/4/17 18:15:53
  2. 卷积神经网络概念与原理

    转自:https://blog.csdn.net/yunpiao123456/article/details/52437794一、卷积神经网络的基本概念 受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网…...

    2024/5/3 1:39:39
  3. 读《数学之美》

    读《数学之美》事实上准备读《数学之美》这本书,是从非常久開始的。记得去年夏天的时候,是读了《浪潮之巅》,然后就认识了吴军这种一个人,非常喜欢他的写作风格。于是就准备读《数学之美》的。《数学之美》这本书,本身和《浪潮之巅》一样。已经在众多的读者中有了一个非常…...

    2024/4/19 20:44:26
  4. Tomcat8安装及配置步骤

    1.下载tomcat8 ,官网地址:http://tomcat.apache.org/根据自己电脑的系统 ,下载对应的版本zip ,我下载的是window64位的zip包下一步:2.解压缩apache-tomcat-8.5.11-windows-x64.zip到D盘3.环境变量配置:(请先看文章结尾)3.1 系统变量 ,新增 CATALINA_HOME,地址就是刚才文件夹 ,不…...

    2024/4/20 7:32:43
  5. 最新EDA软件

    ActiveHDLActiveHDL4.2.876ActiveHDL5.1ActiveHDL6.1ActiveHDL6.2ActiveHDL6.3(2CD)及全部库文件 ADSADS2003AADS2003CADS2004A AnsoftANSOFT.DESIGNER.v9.0_HFSSANSOFT.ENSEMBLE.V8.0ANSOFT.HFSS.V9.0ANSOFT.MAXWELL.V9.0ANSOFT.OPTIMETRICS 2.5ANSOFT.SERENADE.DESIGN.ENVI…...

    2024/4/19 22:06:37
  6. 2019年不想被web前端开发淘汰,你需要掌握哪些技术?

    去的2018年可以说是一个“编程语言年”,这一年的前端开发不再像过去几年里新技术框架层出不穷,百家争鸣的局面,而是各种组件,模块,很多东西都有痕迹可寻,技术都在原来的基础上有了革新和沉淀。前端招聘方面也在紧跟技术发展的节奏,相比前几年人才市场的繁华热闹,2018年…...

    2024/4/25 13:21:58
  7. OSChina 周五乱弹 ——我想对喷子说,别停下你探索的脚步!

    2019独角兽企业重金招聘Python工程师标准>>> @蓝一点 : 西厢记。 西厢-后弦 手机党少年们想听歌,请使劲儿戳(这里) @OSC小董君 : 2016余额不足,只剩三分之一。 (看到你的配图,不得不说一下,BMX不敢在这么潮湿的路面骑的,1、会把水甩到背上。2、潮湿的地方对…...

    2024/4/20 0:17:54
  8. SoftRenderer&RenderPipeline(从迷你光栅化软渲染器的实现看渲染流水线)

    简介这是可能一篇没有什么实际作用的文章,因为没有任何shader效果实现,整篇文章到最后,我只实现了一个旋转的立方体(o(╯□╰)o,好弱),和游戏引擎渲染的万紫千红的3D世界显得有很大落差,仿佛一切都回到了最初的起点(不知道有没有人能猜出来左侧的是哪部游戏大作的截图…...

    2024/4/18 19:03:53
  9. 一个可玩的贪吃蛇源代码

    原本以为做一个贪吃蛇的雏形很简单,因为它的行为很简单,但是到具体开发的时候发现有很多细节需要注意:键盘监听 如何让蛇移动起来 如何控制蛇的速度 如何让蛇边长 蛇碰到身子要死亡 碰到墙也要死亡 如何控制蛇的速度 蛇不能后退走 如何控制蛋的随机出现 如何控制蛋的颜色变化 …...

    2024/4/17 18:15:10
  10. 服务器使用Tomcat配置server.xml文件通过域名直接跳转到项目

    最近自己注册了一个域名,然后尝试着在服务器使用tomcat发布项目,并通过域名直接跳转到自己指定的页面,如www.xxx.com直接打开自己项目主页或者其他页面,不用通过localhost:8080/xxx/index.jsp 去打开自己的项目主页 下面是配置的方法: 首先需要把项目导出为xxx.war格式,然…...

    2024/4/17 18:15:34
  11. 从芯片到系统的整个产业链软件

    ANSOFT产品: Ansoft HFSS v11.1.1 Full-ISO 1CD(HF/RM/EM,世界上第一个商业化的三维结构电磁场仿真软件。可分析仿真任意三维无源结构的高频电磁场,可直接得到特征阻抗、传播常数、S参数及电磁场、辐射场、天线方向图等结果。该软件广泛应用于无线和有线通信、计算机、卫星、雷…...

    2024/4/17 18:19:46
  12. Tomcat调节启动时间

    web工程部署时需要加载很多类和文件,需要的时间比较长。如果时间超过了45秒,tomcat就会自动退出并且报错。双击tomcat server容器,修改配置文件中的启动时间。进入tomcat配置文件界面后,点击右侧的Timeouts选项,展开里面的配置内容就可以修改启动时间。直接输入具体的启动…...

    2024/4/17 18:15:22
  13. 演员刘涛入职阿里,职级相当于“集团副总裁”,年薪秒杀阿里高管

    来源 |和讯网5月9日,刘涛发微博宣布,自己正式加入阿里巴巴大家庭,成为了聚划算官方优选官,花名刘一刀,并且晒出了工牌。近年来已有不少明星加盟阿里巴巴,例如花名矮大紧的高晓松,担任阿里娱乐战略委员会主席;花名阿拉雷的雷佳音,担任支付宝会员体验官;花名娜比的欧阳…...

    2024/4/20 6:23:54
  14. Android压缩图片和libjpeg库

    前言 Fjpeg使用Fjpeg注意如何使用 如何压缩图片只改变在硬盘的存储大小 如何改变图片分辨率让其Bitmap对象可以加载到内存中 关于重载版本开始学习之旅 补充知识的结论修改图片分辨率 防止在Android加载Bitmap的时候oom内存溢出 解决方案1 解决方案2希望压缩图片方便网络传输 第…...

    2024/5/3 7:52:04
  15. Javascript模块化开发AMD规范与CMD规范的区别

    模块化开发能够提高开发的效率,并且能优化性能。当需要什么功能模块时,去加载需要的模块,而不是全部功能都加载到页面中。但是模块化有规范,我们前端开发必须遵守。像W3C标准,这都是规定的,就像公式一样,必须按照公式,才能得出结果。 目前JavaScript模块规范有两种形式…...

    2024/4/11 19:47:43
  16. (完整源码)H5贪吃蛇小游戏——HTML+CSS+JavaScript实现

    最近因为帮助大一的学妹做网页,又接触了一下前端方面的知识。(学妹已经成了女朋友!!!,嘻嘻)感谢自己当年认真学习,大三了好多东西还能拾起来,哈哈。我翻出了我当年写的代码,还真不少呢。今天复习复习,看一看那时候写的一个贪吃蛇的代码。当时用了一整天,跟着今日头…...

    2024/4/19 16:20:10
  17. 开源EDA软件-KiCAD

    目录使用背景 使用背景 之前工作中一直用的是AD,但是由于版权问题和目前中美关系,最近选择了一款开源的EDA软件-KiCAD。这款软件界面实际类似于Protel,操作习惯类似于Candence。只要不是设计很复杂的产品,这款软件完全够用。后续我会发布一些关于这个软件的使用教程和一些心…...

    2024/4/20 6:13:49
  18. Tomcat配置成功,但输入http://localhost:8080/不显示界面的解决方法

    一、打开命令窗口(win+r),输入cmd,enter;二、输入startup;三 、将DOS窗口缩小化,然后打开浏览器输入http://localhost:8080/,就卡伊看到小猫界面了;...

    2024/4/17 18:15:35
  19. 从图像生成自动描述:对模型,数据集和评估方法的综述

    摘要从自然图像生成自动描述是一个具有挑战性的问题,近来受到计算机视觉和自然语言处理社区的大量关注。 在本次调查中,我们根据他们如何将这个问题概念化的现有方法进行分类,即将描述作为生成问题或作为视觉或多模态表征空间上的检索问题的模型。 我们提供了对现有模型的详…...

    2024/4/17 18:14:28
  20. 贪吃蛇全代码

    <script> /* * 分析: 食物 , 小蛇 , 游戏 ,三个对象 * */ //一:食物对象 ((function () {//创建一个空数组,保存每一个小方块,方便删除小方块var elements = [];//首先要通过构造函数创建对象 属性function Food(width, height, color, x, y) {this.width = width…...

    2024/4/17 18:16:22

最新文章

  1. React中的高阶组件

    高阶组件 HOC 是 React 中用于复用组件逻辑的一种高级技巧。HOC 自身不是 React API 的一部分&#xff0c;它是一种基于 React 组合特性而形成的设计模式 参数为组件&#xff0c;返回值为新函数 const EnhanceComponent higherOrderComponent(WrappedComponent);组件将 pro…...

    2024/5/3 9:02:23
  2. 梯度消失和梯度爆炸的一些处理方法

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

    2024/3/20 10:50:27
  3. 基于AI智能识别技术的智慧展览馆视频监管方案设计

    一、建设背景 随着科技的不断进步和社会安全需求的日益增长&#xff0c;展览馆作为展示文化、艺术和科技成果的重要场所&#xff0c;其安全监控系统的智能化升级已成为当务之急。为此&#xff0c;旭帆科技&#xff08;TSINGSEE青犀&#xff09;基于视频智能分析技术推出了展览…...

    2024/4/30 17:11:11
  4. 阿里云弹性计算通用算力型u1实例性能评测,性价比高

    阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…...

    2024/5/1 13:48:44
  5. 【外汇早评】美通胀数据走低,美元调整

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

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

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

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

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

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

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

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

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

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

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

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

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

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

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

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

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

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

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

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

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

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

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

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

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

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

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

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

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

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

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

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

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

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

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

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

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

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

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

    2024/4/30 9:42:49
  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