没有约定转存1年没去怎么办怎么解压?怎么办?

有没有可能将datatable 或dataset 数据压缩后存入到缓存,调用时解压转成datable或dataset 使用
[问题点数:40分]
本版专家分:0
结帖率 66.67%
CSDN今日推荐
本版专家分:195
本版专家分:29794
本版专家分:27429
2018年2月 总版技术专家分月排行榜第二
2018年2月 .NET技术大版内专家分月排行榜第一
2018年1月 .NET技术大版内专家分月排行榜第二
本版专家分:262
本版专家分:72936
2014年4月 荣获微软MVP称号
2017年6月 移动开发大版内专家分月排行榜第一
2013年12月 .NET技术大版内专家分月排行榜第二2013年11月 .NET技术大版内专家分月排行榜第二2013年10月 .NET技术大版内专家分月排行榜第二2013年8月 .NET技术大版内专家分月排行榜第二2013年7月 .NET技术大版内专家分月排行榜第二
2013年9月 .NET技术大版内专家分月排行榜第三
本版专家分:45357
2017年11月 .NET技术大版内专家分月排行榜第二2017年10月 .NET技术大版内专家分月排行榜第二
2018年6月 .NET技术大版内专家分月排行榜第三2018年3月 .NET技术大版内专家分月排行榜第三2017年12月 .NET技术大版内专家分月排行榜第三2017年9月 .NET技术大版内专家分月排行榜第三
本版专家分:6411
匿名用户不能发表回复!|
其他相关推荐相信使用过的朋友应该会喜欢上libjpeg,它简单易用、压缩质量可以随意控制、并且稳定性很好,但是,官方网站给提供的libjpeg库, 不论是进行压缩时还是解压缩时,都需要用到FILE,使得我们如果想在内存中直接压缩或解压缩图像还要自己实现相应的结构, 总之,比较麻烦,尤其对初学者,更是不知从何处入手,幸运的是,libjpeg给我们提供了源代码,今天我就为大家介绍,怎样修改源代码, 使libjpeg可以非常容易的直接处理内存中的图像,而无需借助文件操作。&
一、建立自己的libjpeg工程 &&&&&&&为了修改后编译方便,也为了以后在VC&环境下容易使用libjpeg库,我们按以下步骤将libjpeg转换为VC环境下的工程。 &&&&&&&&
1、在VC环境下重新建立一个空的static&library工程,工程名为libjpeg,此处注意,新建工程不要包含mfc,不要预编译头文件; &&&&&&&&
2、然后将libjpeg下的jcapimin.c&jcapistd.c&jccoefct.c&jccolor.c&jcdctmgr.c&jchuff.c& &&&&&&&&jcinit.c&jcmainct.c&jcmarker.c&jcmaster.c&jcomapi.c&jcparam.c& &&&&&&&&jcphuff.c&jcprepct.c&jcsample.c&jctrans.c&jdapimin.c&jdapistd.c& &&&&&&&&jdatadst.c&jdatasrc.c&jdcoefct.c&jdcolor.c&jddctmgr.c&jdhuff.c& &&&&&&&&jdinput.c&jdmainct.c&jdmarker.c&jdmaster.c&jdmerge.c&jdphuff.c& &&&&&&&&jdpostct.c&jdsample.c&jdtrans.c&jerror.c&jfdctflt.c&jfdctfst.c& &&&&&&&&jfdctint.c&jidctflt.c&jidctfst.c&jidctint.c&jidctred.c&jquant1.c& &&&&&&&&jquant2.c&jutils.c&jmemmgr.c& &&&&&&&jchuff.h&&jconfig.h&jdhuff.h&jdct.h&jerror.h&jinclude.h&jmemsys.h&jmorecfg.h& &&&&&&&&jpegint.h&jpeglib.h&jversion.h&等文件拷贝到新工程的文件夹下,并将.c文件改名为.cpp; &&&&&&&&&
3、将所有的源文件及头文件添加到新建的工程中; &&&&&&&&&
4、编译新工程,此时就可以生成libjpeg.lib了。
二、分析并修改源代码 &&&&&&&&
我们知道,libjpeg是利用FILE进行存取图像数据的,接下来,我们就要分析一下libjpeg是怎样利用FILE进行存取图像数据的, 然后我们用内存拷贝的方式替换掉所有的文件操作(I/O),也就实现了内存中进行图像压缩和解压缩的目标。 &&&&&&&&
下面,先分析压缩图像时libjpeg是怎样利用FILE进行存储数据的。我们先看在进行图像压缩时,我们所调用的跟文件有关系的函数: &&&&&&&&&&&&&&&&
jpeg_stdio_dest(j_compres_ptr&cinfo,&FILE&*outfile); &&&&&&&&
我们找到这个函数的源代码(jdatadst.cpp文件第130行):
GLOBAL(void)
jpeg_stdio_dest (j_compress_ptr cinfo, FILE * outfile)
/* The destination object is made permanent so that multiple JPEG images
* can be written to the same file without re-executing jpeg_stdio_dest.
* This makes it dangerous to use this manager and a different destination
* manager serially with the same JPEG object, because their private object
* sizes may be different.
Caveat programmer.
if (cinfo-&dest == NULL) { /* first time for this JPEG object? */
cinfo-&dest = (struct jpeg_destination_mgr *)
(*cinfo-&mem-&alloc_small) ((j_common_ptr) cinfo, JPOOL_PERMANENT,
SIZEOF(my_destination_mgr));
dest = (my_dest_ptr) cinfo-&
dest-&pub.init_destination = init_
dest-&pub.empty_output_buffer = empty_output_
dest-&pub.term_destination = term_
dest-&outfile =
&&&&大家看第20行,函数将FILE类型的指针赋值给了dest-&outfile,很显然,以后对文件的操作,就转向了对dest-&outfile&的操作, 我们只要找到所有引用outfile的函数,就可以知道libjpeg是怎样压缩图像到文件的,因此,我们继续搜outfile,搜索结果如下:
Find&all&"outfile",&Subfolders,&Find&Results&1,&"Entire&Solution" &&
E:\VS2005\libjpeg\libjpeg\jpeglib.h(910):EXTERN(void)&jpeg_stdio_dest&JPP((j_compress_ptr&cinfo,&FILE&*&outfile)); &&
E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(28):&&FILE&*&&&/*&target&stream&*/ &&
E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(85):&&if&(JFWRITE(dest-&outfile,&dest-&buffer,&OUTPUT_BUF_SIZE)&!= &&
E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(113):&&&&if&(JFWRITE(dest-&outfile,&dest-&buffer,&datacount)&!=&datacount) &&
E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(116):&&fflush(dest-&outfile); &&
E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(118):&&if&(ferror(dest-&outfile)) &
&E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(130):jpeg_stdio_dest&(j_compress_ptr&cinfo,&FILE&*&outfile) &&
E:\VS2005\libjpeg\libjpeg\jdatadst.cpp(150):&&dest-&outfile&=& &&Matching&lines:&8&&&&Matching&files:&2&&&&Total&files&searched:&57
&&&&可以看到,共有8处引用了outfile变量,第一处为函数声明,第二处为变量声明,第三、四、五、六处为文件操作,第七处和第八处我们 已经见过了,我们只需要把这八处改了就可以实现我们的目标了。如下:
EXTERN(void)&jpeg_stdio_dest&JPP((j_compress_ptr&cinfo,&char*&outdata));&//&由
EXTERN(void)&jpeg_stdio_dest&JPP((j_compress_ptr&cinfo,&FILE&*&outfile));改写 char&*&&&/*&target&stream&*/&//&由&
FILE&*&&&/*&target&stream&*/改写
jdatadst.cpp文件第87行empty_output_buffer&(j_compress_ptr&cinfo)函数 memcpy(dest-&outdata,dest-&buffer,OUTPUT_BUF_SIZE);//&由
JFWRITE(dest-&outfile,&dest-&buffer,&OUTPUT_BUF_SIZE)改写
jdatadst.cpp文件第114行term_destination&(j_compress_ptr&cinfo) memcpy(dest-&outdata,dest-&buffer,datacount);&&&&&&//&由
JFWRITE(dest-&outfile,&dest-&buffer,&datacount)改写
删除fflush(dest-&outfile);和if&(ferror(dest-&outfile))及相关的其它语句。 peg_stdio_dest&(j_compress_ptr&cinfo,&char*&outdata)&&&&//&由peg_stdio_dest&(j_compress_ptr&cinfo,&FILE&*&outfile)改写 dest-&outdata&=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//&由
dest-&outfile&=&改写
&&&&我们改到这里,可以编译一下,应该不会有错误产生,但是,你会不会觉得有问题呢?对,我们发现,我们没有为内存区域提供偏移量(每次追加图像数据后,偏移量指向当前的位置), 另外,由于只有到压缩完才能知道图像压缩完后的数据量大小,我们还需要一个指示图像数据大小的变量。 &&& &&&&我们将这两个变量添加到outdata后面,跟outdata一样,作为dest的成员变量,如下:
typedef&struct&{ &&struct&jpeg_destination_mgr&&/*&public&fields&*/
&&char&*&&&/*&target&stream&*/ &&
& int&&*pS&&&//&新加变量,该指针为调用者提供,压缩完后返回图像大小 &&
& int&nOutO&&&//&新加变量 &&
& JOCTET&*&&&/*&start&of&buffer&*/
}&my_destination_
我们将通过jpeg_stdio_dest函数提供pSize指针,并在jpeg_stdio_dest的实现函数里对新添加的变量进行初始化,如下: GLOBAL(void) jpeg_stdio_dest&(j_compress_ptr&cinfo,&char&*&outdata,&int&*pSize) { &&
& my_dest_ptr&
&&/*&The&destination&object&is&made&permanent&so&that&multiple&JPEG&images &&&
&& *&can&be&written&to&the&same&file&without&re-executing&jpeg_stdio_dest. &&&
&& *&This&makes&it&dangerous&to&use&this&manager&and&a&different&destination &&&
& *&manager&serially&with&the&same&JPEG&object,&because&their&private&object &&&
& *&sizes&may&be&different.&&Caveat&programmer. &&&*/ &&
&& if&(cinfo-&dest&==&NULL)&{&/*&first&time&for&this&JPEG&object?&*/ &&&&cinfo-&dest&=&(struct&jpeg_destination_mgr&*) &&&&&&(*cinfo-&mem-&alloc_small)&((j_common_ptr)&cinfo,&JPOOL_PERMANENT, &&&&&&SIZEOF(my_destination_mgr)); &&}
&&dest&=&(my_dest_ptr)&cinfo-& &&dest-&pub.init_destination&=&init_ &&dest-&pub.empty_output_buffer&=&empty_output_ &&dest-&pub.term_destination&=&term_ /*&修改过的代码&*/ &&dest-&outdata&=& &&dest-&nOutOffset&=&0; &&dest-&pSize&=&pS &&*(dest-&pSize)=&0; }
改写声明函数 EXTERN(void)&jpeg_stdio_dest&JPP((j_compress_ptr&cinfo,&char*&outdata,&int&*pSize));
jdatadst.cpp文件第87行empty_output_buffer&(j_compress_ptr&cinfo)函数 memcpy(dest-&outdata+dest-&nOutOffset,dest-&buffer,OUTPUT_BUF_SIZE);//&由JFWRITE(dest-&outfile,&dest-&buffer,&OUTPUT_BUF_SIZE)改写 dest-&nOutOffset+=OUTPUT_BUF_SIZE; *(dest-&pSize)=dest-&nOutO
jdatadst.cpp文件第114行term_destination&(j_compress_ptr&cinfo) memcpy(dest-&outdata+dest-&nOutOffset,dest-&buffer,datacount);&&&&&&//&由JFWRITE(dest-&outfile,&dest-&buffer,&datacount)改写 dest-&nOutOffset+= *(dest-&pSize)=dest-&nOutO
重新编译工程,这样我们就实现了压缩bmp位图到内存中,当然,调用jpeg_stdio_dest之前,我们需要先分配足够的内存,并把内存指针传递给jpeg_stdio_dest函数, 好了,我们再分析libjpeg在解压缩jpg图像时,是怎样从jpg文件读入图像数据的。
我们先看我们在解压缩图像时调用的与文件操作有关的函数,如下: jpeg_stdio_src&(j_decompress_ptr&cinfo,&FILE&*&infile)。 在该函数的实现代码中找到了my_src_ptr结构,并且,我们发现与文件操作有关的该结构的成员变量为infile,参考上面内容,我们搜索infile,搜索结果如下: Find&all&"infile",&Subfolders,&Find&Results&1,&"Entire&Solution" &&E:\VS2005\libjpeg\libjpeg\jpeglib.h(911):EXTERN(void)&jpeg_stdio_src&JPP((j_decompress_ptr&cinfo,&FILE&*&infile)); &&E:\VS2005\libjpeg\libjpeg\jdatasrc.cpp(28):&&FILE&*&&&/*&source&stream&*/ &&E:\VS2005\libjpeg\libjpeg\jdatasrc.cpp(95):&&nbytes&=&JFREAD(src-&infile,&src-&buffer,&INPUT_BUF_SIZE); &&E:\VS2005\libjpeg\libjpeg\jdatasrc.cpp(182):jpeg_stdio_src&(j_decompress_ptr&cinfo,&FILE&*&infile) &&E:\VS2005\libjpeg\libjpeg\jdatasrc.cpp(209):&&src-&infile&=& &&Matching&lines:&5&&&&Matching&files:&2&&&&Total&files&searched:&57
根据上面的经验,我们考虑,除了将FILE&*类型变量改为char&*类型的变量外,还要添加两个变量,图像大小的变量及图像偏移量,这跟图像压缩时差不多,所不同的是, 图像压缩时,图像大小是由libjpeg库返回,所以在调用是提供给libjpeg库的是个指针,而在解压缩时,图像数据大小是由调用者通过变量(不是指针)提供给libjpeg库。 由于我详细讲解了图像压缩时的我们所做的工作,我想读者朋友们很容易就能理解解压缩时所做的更改,下面我只列出我们所改写的代码,就不再详细讲解了。
jpeglib.h&第911行 EXTERN(void)&jpeg_stdio_src&JPP((j_decompress_ptr&cinfo,&char&*&indata,int&nSize));
jdatasrc.cpp&第33行 /*&Expanded&data&source&object&for&stdio&input&*/
typedef&struct&{ &&struct&jpeg_source_mgr&&/*&public&fields&*/
&&char&*&&&/*&source&stream&*/ &&int&nInO &&int&nS &&JOCTET&*&&&/*&start&of&buffer&*/ &&boolean&start_of_&/*&have&we&gotten&any&data&yet?&*/ }&my_source_
jdatasrc.cpp&第183行 GLOBAL(void) jpeg_stdio_src&(j_decompress_ptr&cinfo,&char&*&indata,&int&nSize) { &&my_src_ptr&
&&/*&The&source&object&and&input&buffer&are&made&permanent&so&that&a&series &&&*&of&JPEG&images&can&be&read&from&the&same&file&by&calling&jpeg_stdio_src &&&*&only&before&the&first&one.&&(If&we&discarded&the&buffer&at&the&end&of &&&*&one&image,&we'd&likely&lose&the&start&of&the&next&one.) &&&*&This&makes&it&unsafe&to&use&this&manager&and&a&different&source &&&*&manager&serially&with&the&same&JPEG&object.&&Caveat&programmer. &&&*/ &&if&(cinfo-&src&==&NULL)&{&/*&first&time&for&this&JPEG&object?&*/ &&&&cinfo-&src&=&(struct&jpeg_source_mgr&*) &&&&&&(*cinfo-&mem-&alloc_small)&((j_common_ptr)&cinfo,&JPOOL_PERMANENT, &&&&&&SIZEOF(my_source_mgr)); &&&&src&=&(my_src_ptr)&cinfo-& &&&&src-&buffer&=&(JOCTET&*) &&&&&&(*cinfo-&mem-&alloc_small)&((j_common_ptr)&cinfo,&JPOOL_PERMANENT, &&&&&&INPUT_BUF_SIZE&*&SIZEOF(JOCTET)); &&}
&&src&=&(my_src_ptr)&cinfo-& &&src-&pub.init_source&=&init_ &&src-&pub.fill_input_buffer&=&fill_input_ &&src-&pub.skip_input_data&=&skip_input_ &&src-&pub.resync_to_restart&=&jpeg_resync_to_&/*&use&default&method&*/ &&src-&pub.term_source&=&term_ &&src-&indata&=&&&&//&新添加行 &&src-&nSize&=&nS&&&//&新添加 &&src-&nInOffset&=&0;&&&//&新添加 &&src-&pub.bytes_in_buffer&=&0;&/*&forces&fill_input_buffer&on&first&read&*/ &&src-&pub.next_input_byte&=&NULL;&/*&until&buffer&loaded&*/ }
jdatasrc.cpp&第91行 METHODDEF(boolean) fill_input_buffer&(j_decompress_ptr&cinfo) { &&my_src_ptr&src&=&(my_src_ptr)&cinfo-& &&size_t&
&&//nbytes&=&JFREAD(src-&infile,&src-&buffer,&INPUT_BUF_SIZE); &&nbytes&=&src-&nSize-src-&nInO &&if&(nbytes&INPUT_BUF_SIZE)&nbytes&=&INPUT_BUF_SIZE;
&&if&(nbytes&&=&0)&{ &&&&if&(src-&start_of_file)&/*&Treat&empty&input&file&as&fatal&error&*/ &&&&&&ERREXIT(cinfo,&JERR_INPUT_EMPTY); &&&&WARNMS(cinfo,&JWRN_JPEG_EOF); &&&&/*&Insert&a&fake&EOI&marker&*/ &&&&src-&buffer[0]&=&(JOCTET)&0xFF; &&&&src-&buffer[1]&=&(JOCTET)&JPEG_EOI; &&&&nbytes&=&2; &&}
&&memcpy(src-&buffer,src-&indata+src-&nInOffset,nbytes); &&src-&nInOffset+=
&&src-&pub.next_input_byte&=&src-& &&src-&pub.bytes_in_buffer&=& &&src-&start_of_file&=&FALSE;
&&return&TRUE; }
至此,libjpeg库的源代码中所有要改的东西我们都已经完成,剩下的事情就是我们编写一段测试程序测试一下。
三、编写测试代码
&&&&对于libjpeg库的详细的调用步骤,请参照我的文章《利用jpeglib压缩图像为jpg格式》,上面详细介绍了利用libjpeg库 进行图像压缩和解压缩的步骤,在编写本例的测试代码时,我们在上次提供的测试代码的基础上进行改进,如下:
&&&&无论压缩还是解压缩,与原来的libjpeg库调用不同的地方都只有一处,就是jpeg_stdio_dest和jpeg_stdio_src这两个函数的调用, 调用原来的libjpeg库时,需要为这两个函数提供已经打开的jpg文件句柄,而对于新的libjpeg库,不需要打开jpg文件了,压缩时, 我们需要提供足够大的内存区给libjpeg&库,解压缩时,只需要把存放有jpeg格式图像的内存区提供给libjpeg库就行了,下面详细介绍 对于改写后的jpeg_stdio_dest和jpeg_stdio_src这两个函数的调用方法。
&&&&1、jpeg_stdio_dest &&&&&函数的原形为:void&jpeg_stdio_dest(j_compress_ptr&cinfo,&char&*&outData,&int&*pSize); &&&&&这里,outData指向我们提供给libjpeg库用于存放压缩后图像数据的内存区,这块内存要在我们调用该函数前申请好,大家可以看到, 我们在libjpeg库内没有对该内存区进行越界访问检查并且要足够大,否则会出现内存越界访问的危险,当整个图像压缩工作完成后,pSize 返回jpg图像数据的大小。测试代码如下: &&char&outdata[1000000];&//&用于缓存,这里设置为1000K,实际使用时可以采用动态申请的方式 &&int&nS&//&用于存放压缩完后图像数据的大小
&&&&&&&&&&&&&&&&.......... &&&&&&&&&&&&&&&&jpeg_stdio_dest(&jcs,&outdata,&nSize); &&&&&&&&&&&&&&&&..........
&&&&2、jpeg_stdio_src &&&&&函数的原形为:void&jpeg_stdio_src(j_decompress_ptr&cinfo,&char&*&inData,int&nSize); &&&&&这里,inData指向我们将要进行解压缩的jpg数据,该数据我们可以直接从jpg文件中读取,也可以是通过libjpeg库在内存中直接压缩 生成的数据,nSize&当然是这个jpg数据的大小。测试代码如下: &.............. &&&&&&&&char&indata[1000000];&//&用于存放解压缩前的图像数据,该数据直接从jpg文件读取 &&&&&&&&FILE&*f&=&fopen(strSourceFileName,"rb"); &if&(f==NULL) &{ &&printf("Open&file&error!\n"); && &} &int&nSize&=&fread(outdata,1,1000000,f);&//&读取jpg图像数据,nSize为实际读取的图像数据大小 &fclose(f); &//&下面代码用于解压缩,从本行开始解压缩 &jpeg_stdio_src(&cinfo,&outdata,nSize); &.............
阅读(...) 评论()客户端下载
发送验证码
未注册的用户手机验证后自动登录
30天内免登录
社交账号登录
绑定手机号
发送验证码
压力大怎么办?七个小办法可以快速的解压
现在的生活节奏也是越来越快了,而且很多人都会出现一些压力大,所以导致很多人出现一些紧张感,或者是一些不健康的生活方式,都可能会导致压力大,那么现在就为大家介绍压力大,到底应该怎么办呢。1、从原生家庭的逻辑来看我们和父母的关系会影响到我们日后和领导、老师以及权威的关系;我们和兄弟姐妹的关系、父母与其兄弟姐妹的关系会影响到我们的同学、同事和同龄人的关系;我们对待父母安排的事情的态度会影响到我们对待工作事物的态度;我们的职业压力和我们从家庭当中感受到的压力有强劲的相关;2、从根本上来说压力的承受者是谁,谁就一定可以把压力调整出去;3、从正面意义上看待自己这份工作的价值,任何一件事情,一份工作,只要你用心,你都会发现它的价值;4、相信一点压力相对于生命来讲,是一种必然的存在,用积极乐观的态度去应对它;5、什么都没有时如果你还没有工作经验,或者你没有了解某职业的压力,做选择时就要充分考虑这项工作对自己的兴趣和爱好,了解自己至关重要;6、职业压力从心理学意义上只是没有找到职业快感的一种表现形式,当我们真正快乐的时候,没有人会认为有压力存在;7、适度转移和释放压力面对压力,转移是一种最好的办法。压力太重背不动了,那就放下来不去想它,把注意力转到让你轻松快乐的事上来。通过上面的介绍,相信大家都了解了,所以当我们出现压力比较大的情况下,那么适当的去释放压力才可以的,可以找好朋友去聊聊天或者是一些转移的方式来解压的。元气骑士存档怎么转移?安卓存档转移方法 - 游戏鸟
同厂商游戏& & &手里面有个word的文件,上面有电子印章,需转换为pdf文档,但是通过一般的转换,电子印章会失效,后来就找虚拟打印机软件转换成pdf,但是在网上找的很多都是收费的,或者免费使用但是&
教程写的比较全,步骤详细,适合折腾的兄die折腾 该文在Centos 6 64位下成功。均为SSH下操作。 SolusVM分为主控和被控,主控为管理所有主机,虚拟主机、VPS、独服均可;被控为主机,需为独服。 一、Sol&
Fikker 是一款面向 CDN/站长 的专业级网站缓存(Webcache)和反向代理服务器软件(Reversed Proxy Server)。 注:Fikker缓存 = 反向代理 + 页面缓存 + 实时监控 + 流量统&
& & 现在网上的很多系统都带一些推广软件以及强制锁定网站主页的行为,或者是安装了一些自己不是很喜欢的软件,所以就想自己再封装一个系统来用用。& 因为现在电脑内存比较大,自己很久没做32位的&
& & 现在网上的很多系统都带一些推广软件以及强制锁定网站主页的行为,或者是安装了一些自己不是很喜欢的软件,所以就想自己再封装一个系统来用用。& 以前也发布过一些自己做的精简系统,现在做的最&
& & 前面介绍了华为手机的解锁和在emui5下进行root,现在介绍下华为emui8下的root。 1.下载EMUI8.0_ROOT-TOOLS:点此下载&,再把查找我的手机关闭。 注意:&
在上一篇文章《华为手机刷入第三方recovery》解锁手机并刷入第三方recover后,就可以进行root了,emui5和emui8的root方法不太一样,这里先说emui5的。 还是先下载我找到的工具包,华为手机刷入第&
& & 华为手机刷入第三方recovery的前提条件有两个。 & & 一个是要去官方获取解锁码,这个不详细说,网上教程都比较清楚,我这里只吐槽下爱国为的霸道行径“为了更好的保护消费&
2018年七月 &(6)
2018年六月 &(2)
2018年五月 &(4)
2018年四月 &(2)
2018年三月 &(1)
2018年二月 &(1)
2018年一月 &(1)
2017年十二月 &(3)
2017年十一月 &(2)
2017年十月 &(2)
2017年九月 &(2)
2017年八月 &(7)
2017年七月 &(6)
2017年六月 &(1)
2017年五月 &(5)
2017年四月 &(1)
2017年三月 &(2)
2017年二月 &(9)
2017年一月 &(4)
2016年十二月 &(1)
2016年十一月 &(1)
2016年十月 &(8)
2016年八月 &(2)
2016年七月 &(3)
2016年六月 &(5)
2016年五月 &(10)
2016年四月 &(3)
2016年三月 &(3)
2016年二月 &(2)
2016年一月 &(1)
2015年十二月 &(2)
2015年十一月 &(4)
2015年十月 &(2)
2015年九月 &(3)
2015年八月 &(8)
2015年七月 &(10)
2015年六月 &(11)
2015年五月 &(10)
2015年四月 &(4)
2015年三月 &(7)
2015年二月 &(12)
2015年一月 &(10)
2014年十二月 &(13)
2014年十一月 &(5)
2014年十月 &(12)
2014年九月 &(4)
2014年八月 &(5)
2014年七月 &(8)
2014年六月 &(11)
2014年五月 &(12)
2014年四月 &(8)
2014年三月 &(6)
2014年二月 &(8)
2014年一月 &(16)
2013年十二月 &(11)
2013年十一月 &(25)
2013年十月 &(14)
2013年九月 &(15)
2013年八月 &(18)
2013年七月 &(10)
2013年六月 &(19)
2013年五月 &(27)
2013年四月 &(27)
2013年三月 &(18)
2013年二月 &(9)
2013年一月 &(19)
2012年十二月 &(19)
2012年十一月 &(27)
2012年十月 &(18)
2012年九月 &(18)
2012年七月 &(4)
2012年六月 &(18)
2012年五月 &(17)
2012年四月 &(11)
2012年三月 &(18)
2012年二月 &(14)
2012年一月 &(11)
2011年十二月 &(9)
2011年十一月 &(15)
2011年十月 &(24)
2011年九月 &(17)
2011年八月 &(21)
2011年七月 &(29)
2011年六月 &(37)
2011年五月 &(22)}

我要回帖

更多关于 约定转存到期后怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信