Android OpenGL直接绘制生成Bitmap图片

求大神指教一下。
我刚接触openGL时间不长, 我现在在做一个要用到openGL的项目,现在有一个功能的是:把openGL的绘制直接绘到Bitmap里,而不是通过openGL截屏来生成Bitmap。
在网上找了一个博客:http://blog.csdn.net/helldevil/article/details/7513946?reload

写的比较含糊,我完全不知道怎么弄。大神能告诉我一下具体步骤怎么写的吗?或者有更好的办法也希望告知一下。
感激不尽!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android中怎么把一个Bitmap图片转换成file类型
我是根据一个URL从网上解析到的图片,代码如下: //创建一个url对象 URL url=new URL(showHeadimg); //打开URL对应的资源输入流 InputStream is= url.openStream(); //从InputStream流中解析出图片 Bitmap bitmap = BitmapFactory.decodeStream(is); 现在想把这个bitmap转成一个File类型提交到后台,请问要怎么做? 请各位帮帮忙了!
Android Bitmap 图片问题
我想把文字和图片生成一个Bitmap,就是怎么把长文(长文包括文字和图片,并且是生成的东西,不在手机界面显示出来)变成一个bitmap
用android openGL ES2.0 显示bitmap时如果想要动态更换bitmap怎样实现?
之前尝试同一个texture ID先后绑定不同bitmap的方法 失败了,显示在屏幕上的还是原来的bitmap。 我想问一下想要更换一个bitmap是否要重新调用以下方法重新生成一个texture?还是有更好的方法? 1. glGenTexture 2. glBindTexture 3.texImage2D 求大神赐教!!! ---------------------------------------------- 以下是我用来更换texture所显示bitmap的函数(函数不能用) void refreshBitmap(){ index=(index+1)%10+1; BitmapFactory.Options options = new BitmapFactory.Options(); Bitmap bitmap; switch(index){ case 1:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame1, options); break; } case 2:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame2, options); break; } case 3:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame3, options); break; } case 4:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame4, options); break; } case 5:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame5, options); break; } case 6:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame6, options); break; } case 7:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame7, options); break; } case 8:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame8, options); break; } case 9:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame9, options); break; } case 10:{ bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame10, options); break; } default: { bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.frame1, options); break; } } System.out.println("shit!!"+texture); glBindTexture(GL_TEXTURE_2D, texture); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); //放大缩小使用的函数 //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); texImage2D(GL_TEXTURE_2D, 0, bitmap, 0); glGenerateMipmap(GL_TEXTURE_2D); //glBindTexture(GL_TEXTURE_2D, 0); bitmap.recycle(); mySurfaceView.requestRender(); } ``` ```
Android绘制bitmap的问题。
## 前提是我通过zxing生成了一个300*300的二维码bitmap,然后我想在这个bitmap四周加上文字。如图![图片说明](https://img-ask.csdn.net/upload/201607/18/1468828503_829827.jpg),整体生成一个bitmap,请问哪位大神能知道怎么弄
请问Android如何通过拍照的Bitmap存在本地File文件
请问Android如何通过拍照的Bitmap存在本地File文件,并且不会因为使用decodeFile而导致内存溢出
【小白求助】安卓opencv用分类器对人脸进行识别的一些问题
小白入门,最近在看opencv的人脸识别(分类) 然后按照网上的代码,学习了之后,自己写了一段,发现运行的时候会卡很久,甚至直接退出,并且越用越卡。 我想实现的是对一张图片进行读入,然后加载多个分类器对图片内容进行识别,从而达到分类的目的。 我那个问题困扰了我一天,想来求助大神 我加载人脸识别的模型没问题,但是同时加载两个模型,比如说人脸和上身,就会卡死。 代码分3个部分,分别是MainActivity.java , execDetect.java , Detector.java 以下是MainActivity.java ``` package com.RinGo.IMGfenlei; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; public class MainActivity extends AppCompatActivity { private Detector frontfaceDetector; private Detector smileDetector; private static String CAMERAIMAGENAME = "image.jpg"; private ImageButton imageButton; private ImageButton imageButton2; private TextView textView; private Bitmap bitmap; private Bitmap rectBitmap; private Bitmap resizeBitmap; private Toast toast; private Button addFile; private Button startDetect; private Button check; private execDetect toDetcet; private String show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.tv_face); // imageButton = (ImageButton) findViewById(R.id.iv_face); //imageButton.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); // imageButton2 = (ImageButton) findViewById(R.id.iv_face2); // imageButton2.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL); toDetcet=new execDetect(); addFile=(Button)findViewById(R.id.addPic); startDetect=(Button)findViewById(R.id.startDetect); check=(Button)findViewById(R.id.check); startDetect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startDetect.setClickable(false); textView.setText("正在检测"); // detect(); Thread d =new Thread(new Runnable() { @Override public void run() { toDetcet.initExecDetect(MainActivity.this,bitmap); // Toast.makeText(MainActivity.this, "initialize succeed", Toast.LENGTH_SHORT).show(); show= toDetcet.startDetect(); // Toast.makeText(MainActivity.this, " succeed", Toast.LENGTH_SHORT).show(); } }); d.run(); textView.setText(show); // startDetect.setClickable(true); } }); check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // startDetect.setClickable(false); textView.setText(toDetcet.getReturntoMain()); // startDetect.setClickable(true); } }); addFile.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 添加照片 // 打开本地相册 Intent intent1 = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent1, 101); //startActivity(intent1); } }); String strLibraryName = "opencv_java3"; // 不需要添加前缀 libopencv_java3 { try { Log.e("loadLibrary", strLibraryName); System.loadLibrary(strLibraryName); //System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // couldn't find "libopencv_java320.so" } catch (UnsatisfiedLinkError e) { Log.e("loadLibrary", "Native code library failed to load.\n" + e); } catch (Exception e) { Log.e("loadLibrary", "Exception: " + e); } } // frontfaceDetector = new Detector(this, R.raw.haarcascade_frontalface_alt, 6, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); } /** * 点击添加照片事件 * * @param v */ public void onClick(View v) { int bt_id = v.getId(); switch (bt_id) { /* case R.id.takePhoto: // 拍照 // 打开本地相机 Intent intent2 = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), CAMERAIMAGENAME)); intent2.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); startActivityForResult(intent2, 102); break; */ case R.id.back: this.finish(); break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 加判断 不选择照片或者不拍照时不闪退 //Log.e("data", String.valueOf(data)); //if (data == null) //return; bitmap = null; switch (requestCode) { // 选择图片库的图片 case 101: if (resultCode == RESULT_OK) { try { Uri uri = data.getData(); bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri); } catch (Exception e) { e.printStackTrace(); } } break; // 表示调用本地照相机拍照 case 102: if (resultCode == RESULT_OK) { //Bundle bundle = data.getExtras(); //bm = (Bitmap) bundle.get("data"); bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/" + CAMERAIMAGENAME); } break; default: break; } Log.e("bitmap", String.valueOf(bitmap)); if (bitmap == null) { toast = Toast.makeText(MainActivity.this, "未选择图像", Toast.LENGTH_SHORT); toast.show(); return; } // 识别图片 并画框 /* Thread detect=new Thread(new Runnable() { @Override public void run() { } }); detect.run(); */ // 将照片剪裁 bitmap将被释放重新赋值 //int ibWidth = imageButton.getWidth(); // int ibHeight = imageButton.getHeight(); //resizeBitmap = imageButton.resizeBitmap(bitmap, ibWidth, ibHeight); //imageButton.setBitmap(resizeBitmap); //imageButton2.setBitmap(rectBitmap); } private void detect() { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { toDetcet.initExecDetect(MainActivity.this,bitmap); // Toast.makeText(MainActivity.this, "initialize succeed", Toast.LENGTH_SHORT).show(); String show= toDetcet.startDetect(); // Toast.makeText(MainActivity.this, " succeed", Toast.LENGTH_SHORT).show(); textView.setText(show); } }); //textView.setText(toDetcet.getReturntoMain()); } } ``` 以下是activity_main.xml ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/tv_face" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:text="未检测到人脸" android:textColor="@color/colorAccent" app:layout_constraintBottom_toTopOf="@+id/ll1" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <LinearLayout android:id="@+id/ll1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/addPic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 选择图片(CV) " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/startDetect" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 开始识别 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="5dp" android:layout_weight="1" android:onClick="onClick" android:text=" 结果 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButton android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="0dp" android:layout_weight="1" android:onClick="onClick" android:text=" 返回 " android:textSize="16sp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" /> </LinearLayout> </LinearLayout> ``` 以下是execDetect.java ``` package com.RinGo.IMGfenlei; import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; import com.RinGo.IMGfenlei.R; import com.RinGo.IMGfenlei.Detector; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; public class execDetect { private Detector frontfaceDetector; private Detector smilefaceDetector; private Detector[] detectors=new Detector[10]; private Detector detector; private Bitmap bitmap; private Bitmap rectBitmap; private String returntoMain=""; private String[] detectorNames=new String[10]; private CascadeClassifier mFrontalFaceClassifier = null; //正脸 级联分类器 private CascadeClassifier mProfileFaceClassifier = null; //侧脸 级联分类器 private int smilefacenum=0; private Context mcontext; private int[] cascades=new int[10]; public void initExecDetect(Context _context,Bitmap _bitmap) { bitmap=_bitmap; mcontext=_context; cascades[0]=R.raw.haarcascade_frontalface_alt; detectors[0] = new Detector(_context,R.raw.haarcascade_frontalface_alt, 1, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); detectorNames[0]="正面人脸"; cascades[1]=R.raw.lbpcascade_frontalface; detectors[1] = new Detector(_context,R.raw.lbpcascade_frontalface, 1, 0.2F, 0.2F, new Scalar(255, 0, 0, 255)); detectorNames[1]="正面人脸2"; } public String startDetect() { // bitmapToMat Mat toMat = new Mat(); Utils.bitmapToMat(bitmap, toMat); // Mat copyMat = new Mat(); // toMat.copyTo(copyMat); // 复制 // togray Mat gray = new Mat(); MatOfRect mRect = new MatOfRect(); Imgproc.cvtColor(toMat, gray, Imgproc.COLOR_RGBA2GRAY); for (int id = 0; id < detectors.length; id++) { //detector = new Detector(mcontext,cascades[id], 3, 0.1F, 0.1F, new Scalar(255, 0, 0, 255)); try { int num = 0; mRect=new MatOfRect(); Rect[] object = detectors[id].detectObjectImage( gray, mRect); Log.e("objectLength", object.length + ""); num=object.length; /* for (Rect rect : object) { num++; } */ returntoMain =returntoMain+ String.format("检测到%1$d个" + detectorNames[id], num) + "\n"; } catch (Exception e) { e.printStackTrace(); } //textView.setText(String.format("检测到%1$d个人脸", facenum)); //Utils.matToBitmap(toMat, bitmap); } return returntoMain; } public String getReturntoMain() { return returntoMain; } } ``` 以下是Detector.java,定义了我的级联分类器的设置 ``` package com.RinGo.IMGfenlei; import android.content.Context; import org.opencv.core.Mat; import org.opencv.core.MatOfRect; import org.opencv.core.Rect; import org.opencv.core.Scalar; import org.opencv.core.Size; import org.opencv.objdetect.CascadeClassifier; import org.opencv.objdetect.Objdetect; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; /** * Created by think-hxr on 17-10-12. */ public class Detector { private CascadeClassifier mCascadeClassifier; private int mMinNeighbors; private float mRelativeObjectWidth; private float mRelativeObjectHeight; private Scalar mRectColor; /** * 构造方法 * * @param context 上下文 * @param id 级联分类器ID * @param minNeighbors 连续几帧确认目标 * @param relativeObjectWidth 最小宽度屏占比 * @param relativeObjectHeight 最小高度屏占比 * @param rectColor 画笔颜色 */ public Detector(Context context, int id, int minNeighbors, float relativeObjectWidth, float relativeObjectHeight, Scalar rectColor) { context = context.getApplicationContext(); mCascadeClassifier = createDetector(context, id); mMinNeighbors = minNeighbors; mRelativeObjectWidth = relativeObjectWidth; mRelativeObjectHeight = relativeObjectHeight; mRectColor = rectColor; } /** * 创建检测器 * * @param context 上下文 * @param id 级联分类器ID * @return 检测器 */ private CascadeClassifier createDetector(Context context, int id) { CascadeClassifier javaDetector; InputStream is = null; FileOutputStream os = null; try { is = context.getResources().openRawResource(id); File cascadeDir = context.getDir("cascade", Context.MODE_PRIVATE); File cascadeFile = new File(cascadeDir, id + ".xml"); os = new FileOutputStream(cascadeFile); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = is.read(buffer)) != -1) { os.write(buffer, 0, bytesRead); } javaDetector = new CascadeClassifier(cascadeFile.getAbsolutePath()); //javaDetector=new CascadeClassifier(); // javaDetector.load(cascadeFile.getAbsolutePath()); if (javaDetector.empty()) { javaDetector = null; } boolean delete = cascadeDir.delete(); return javaDetector; } catch (IOException e) { e.printStackTrace(); return null; } finally { try { if (null != is) { is.close(); } if (null != os) { os.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 目标检测 视频 * * @param gray 灰度图像 * @param object 识别结果的容器 * @return 检测到的目标位置集合 */ public Rect[] detectObject(Mat gray, MatOfRect object) { // 使用Java人脸检测 mCascadeClassifier.detectMultiScale( gray, // 要检查的灰度图像 object, // 检测到的人脸 1.1, // 表示在前后两次相继的扫描中,搜索窗口的比例系数。默认为1.1即每次搜索窗口依次扩大10%; mMinNeighbors, // 默认是3 控制误检测,表示默认几次重叠检测到人脸,才认为人脸存在 Objdetect.CASCADE_SCALE_IMAGE, getSize(gray, mRelativeObjectWidth, mRelativeObjectHeight), // 目标最小可能的大小 gray.size()); // 目标最大可能的大小 return object.toArray(); } /** * 目标检测 图片 * * @param gray 灰度图像 * @param object 识别结果的容器 * @return */ public Rect[] detectObjectImage(Mat gray, MatOfRect object) { mCascadeClassifier.detectMultiScale(gray,object); return object.toArray(); } /** * 根据屏占比获取大小 * * @param gray gray * @param relativeObjectWidth 最小宽度屏占比 * @param relativeObjectHeight 最小高度屏占比 * @return 大小 */ private Size getSize(Mat gray, float relativeObjectWidth, float relativeObjectHeight) { Size size = gray.size(); int cameraWidth = gray.cols(); int cameraHeight = gray.rows(); int width = Math.round(cameraWidth * relativeObjectWidth); int height = Math.round(cameraHeight * relativeObjectHeight); size.width = 0 >= width ? 0 : (cameraWidth < width ? cameraWidth : width); // width [0, cameraWidth] size.height = 0 >= height ? 0 : (cameraHeight < height ? cameraHeight : height); // height [0, cameraHeight] return size; } /** * 获取画笔颜色 * * @return 颜色 */ public Scalar getRectColor() { return mRectColor; } } ```
android Bitmap 图片压缩显示 太卡了,
android 通过拍照和获取图库的图片然后 压缩给H5回回调显示的时候,大图片压缩的太慢了, 需要4、5秒才可以时间都卡在压缩那里了, 想把选择的图片压缩在1M之内,方法是这样写的,但是感觉不太对,压缩很慢, 这是部分代码 String result = null; ByteArrayOutputStream baos = null; try { if (bitmap != null) { baos = new ByteArrayOutputStream(); int imageLength = baos.toByteArray().length / (1024 * 1024); if(imageLength>1){ imageLength=imageLength/100; bitmap.compress(Bitmap.CompressFormat.PNG,imageLength,baos); } bitmap.compress(Bitmap.CompressFormat.PNG,100, baos); baos.flush(); baos.close(); byte[] bitmapBytes = baos.toByteArray(); result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT); 求正确将bitmap压缩在1M之内的方法,谢谢,
c# Bitmap 生成图片并添加边框
c# 生成图片 加 添加边框 主要是在生成图片上面加边框,可以自定义背景等
android保存当前view变成bitmap,并保存bitmap到本地
做了一个保存当前view成bitmap图片的项目,但最终报如下错误,找了半天也找不到解决之法。 --------------------------------- public static Bitmap getBitmapByView(ScrollView scrollView, HorizontalScrollView hsv) { int w = 0; int h = 0; Bitmap bitmap = null; // 获取scrollview实际高度 for (int i = 0; i < scrollView.getChildCount(); i++) { h += scrollView.getChildAt(i).getHeight(); scrollView.getChildAt(i).setBackgroundColor(Color.parseColor("#ffffff")); } // 获取HorizontalScrollView实际宽度 for (int i = 0; i < hsv.getChildCount(); i++) { w += hsv.getChildAt(i).getWidth(); hsv.getChildAt(i).setBackgroundColor(Color.parseColor("#ffffff")); } // 创建对应大小的bitmap bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565); final Canvas canvas = new Canvas(bitmap); scrollView.draw(canvas); hsv.draw(canvas); return bitmap; } /** * 压缩图片 * * @param image * @return */ public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 image.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 把压缩后的数据baos存放到ByteArrayInputStream中 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray()); // 把ByteArrayInputStream数据生成图片 Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null); return bitmap; } /** * 保存到sdcard * * @param b * @return */ public static String savePic(Bitmap b) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US); File outfile = new File("/sdcard/image"); // 如果文件不存在,则创建一个新文件 if (!outfile.isDirectory()) { try { outfile.mkdir(); } catch (Exception e) { e.printStackTrace(); } } String fname = outfile + "/" + sdf.format(new Date()) + ".png"; FileOutputStream fos = null; try { fos = new FileOutputStream(fname); if (null != fos) { b.compress(Bitmap.CompressFormat.PNG, 90, fos); fos.flush(); fos.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return fname; } --------------------------------------------- 09-28 14:31:11.181 23514-23514/com.bonc.ms.main I/ViewRootImpl: finishMotionEvent: handled = true stage=10: View Post IME stage,inputElapseTime=0 eventTime = 867860380 downTime = 867860380 title= com.bonc.ms.main/com.bonc.ms.main.develop.FourGDevelopActivity 09-28 14:31:11.287 23514-23514/com.bonc.ms.main V/SettingsInterface: invalidate [system]: current 4765 != cached 0 09-28 14:31:11.289 23514-23514/com.bonc.ms.main D/ActivityThread: holder:android.app.IActivityManager$ContentProviderHolder@30ba67e, holder.provider:android.content.ContentProviderProxy@c2477df 09-28 14:31:11.398 23514-23520/com.bonc.ms.main W/art: Suspending all threads took: 58.163ms 09-28 14:31:12.773 23514-23724/com.bonc.ms.main D/skia: jpeg_decoder mode 1, colorType 4, w 7907, h 4586, sample 1, bsLength 0!! 09-28 14:31:13.227 23514-23724/com.bonc.ms.main D/skia: jpeg_decoder finish successfully, L:1934!!! 09-28 14:31:13.229 23514-23724/com.bonc.ms.main W/System.err: java.io.FileNotFoundException: /sdcard/image/2016-09-28_14-31-13.png: open failed: ENOENT (No such file or directory) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at libcore.io.IoBridge.open(IoBridge.java:487) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:127) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:116) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at com.bonc.ms.tools.ScreenShot.savePic(ScreenShot.java:110) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at com.bonc.ms.main.develop.FourGDevelopActivity$3.run(FourGDevelopActivity.java:153) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: at java.lang.Thread.run(Thread.java:818) 09-28 14:31:13.231 23514-23724/com.bonc.ms.main W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory) 09-28 14:31:13.232 23514-23724/com.bonc.ms.main W/System.err: at libcore.io.Posix.open(Native Method) 09-28 14:31:13.232 23514-23724/com.bonc.ms.main W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 09-28 14:31:13.232 23514-23724/com.bonc.ms.main W/System.err: at libcore.io.IoBridge.open(IoBridge.java:473) 09-28 14:31:13.232 23514-23724/com.bonc.ms.main W/System.err: ... 6 more
Android开发上传图片,Bitmap释放问题
最近在开发一款社交软件,需要上传图片(最多一次性上传9张),我是先自定义一个图库,然后选9张图片,先压缩一下(压缩压的效果还不错并且一张才60多KB),然后上传到服务器,服务器给我一个地址我在重新请求发送。但在压的时候,内存一直在增加,传了40张左右就崩溃了····求大神···(网上一般的方法都试过了)
android bitmap无损保存图片(不能压缩)如何实现
我实现了往图片中嵌入String,但是android 的bitmap保存成新图片的时候给压缩了,我这个String拿不出来,求教还能有别的无损保存bitmap吗? 急
如何在自定义surfaceView 绘图面板上放置图片 或者bitmap
我在涂鸦面板上绘制图片以bitmap形式保存涂鸦 在转变成byte的形式存入数据库请问如何把数据库中的涂鸦再打开显示到绘图面板上 期待各位大神的回复
android bitmap加载图片,然后涂鸦,实现橡皮擦功能
bitmap_temp = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888); @Override public void onDraw(Canvas canvas) { canvas.drawBitmap(mBitmap, 0, 0, null); } mPaint.setAlpha(0); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 用这种方法是可以实现画图的功能 但是当我用bitmap加载sdcard里的图片,再调用橡皮擦时,橡皮擦画出的都是黑色的,也达不到擦除的效果。 Drawable drawable = Drawable.createFromPath(temp.getPath()); mBitmap = ((BitmapDrawable) drawable).getBitmap().copy( Bitmap.Config.ARGB_8888, true); 希望大家帮一下忙,谢谢!
android Bitmap的问题
Attempt to invoke virtual method 'boolean android.graphics.Bitmap.isRecycled()' on a null 这个问题怎么解决。求大神
android InputStream转化成Bitmap
``` InputStream in=con.getInputStream(); Bitmap bit=BitmapFactory.decodeStream(in); Message msg=Message.obtain(); msg.obj=bit; handler.sendMessage(msg); ``` 1、bitmap这个类的作用是什么? 2、静态方法 obtain 为什么效率高?
Android中如何无损保存BitMap文件?
//拍摄完照片后执行的方法 protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (requestCode == TAKE_PICTURE) { if (resultCode == RESULT_OK) { Bitmap bm = (Bitmap) data.getExtras().get("data"); TakePictureActivity.bm=bm; SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式 File myCaptureFile = new File("sdcard/Allimage_Theelderly/"+df.format(new Date())+".jpg"); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile)); bm.compress(Bitmap.CompressFormat.JPEG, 100, bos); bos.flush(); bos.close(); } catch (Exception e) { e.printStackTrace(); } } } Intent takepic = new Intent(this,TakePictureActivity.class); startActivity(takepic); }
Android中Bitmap.createBitmap引起的频繁GC如何解决
我是在onDraw当中绘制一个动画使一个Bitmap对象同时旋转和移动,于是就使用matrix,matrix完就马上执行Bitmap.createBitmap()方法生成一个新的bitmap并invalidate()通知onDraw重新绘制,但是发觉log中的GC相当的频繁,请问这样会有什么安全隐患,同时求优化的方法,谢谢!
我使用画布把文字和图片合成一张新图 在分享出去 图片看起来非常模糊
公司一个项目需要把文字和图片 二维码各种合成一张新图 但是分享出去后图片看起来比较模糊求大佬指导![图片说明](https://img-ask.csdn.net/upload/202001/15/1579074867_663704.jpg /** * 分享时的图标 */ try { Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.image_act_back); int width = 480;//画布大小 int height = 853;// // mBitmap =Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888); mBitmap =BitmapUtil.getBitmap(bitmap,width,height); canvas = new Canvas(mBitmap); int x = 30; int y = 15; //合成淘宝 (判断是淘宝还是拼多多) Bitmap bitmap_tb = null; if (shopType.equals("1")){ //淘宝 bitmap_tb = BitmapFactory.decodeResource(getResources(), R.mipmap.qbs_tb); }else if (shopType.equals("3")){ bitmap_tb = BitmapFactory.decodeResource(getResources(), R.mipmap.qbs_pdd_order1); }else if (shopType.equals("4")){ bitmap_tb = BitmapFactory.decodeResource(getResources(), R.mipmap.qbs_wph); } Bitmap bitmap2 = BitmapUtil.fitBitmap(bitmap_tb,x); canvas.drawBitmap(bitmap2,x,y,mPicturePaint2); //商品标题 TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(18); TextPaint1.setColor(getResources().getColor(R.color.black)); String content1 = shopTitle.length()>22? shopTitle.substring(0,22):shopTitle; int top2 = 30; canvas.drawText(content1,x+40,x,TextPaint1); //第二行标题 String content2; if (shopTitle.length()>34){ content2 = shopTitle.substring(22,35)+"...."; }else { content2 = shopTitle.length()>22? shopTitle.substring(23):shopTitle; } TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(18); TextPaint1.setColor(getResources().getColor(R.color.black)); top2 = top2+30; canvas.drawText(content2,x,top2,TextPaint1); //券后价格 String content6 = "券后价:"; TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(24); TextPaint1.setColor(getResources().getColor(R.color.detail_prise)); top2 = top2+40; canvas.drawText(content6,x,top2,TextPaint1); //券后价金额 TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(30); TextPaint1.setColor(getResources().getColor(R.color.detail_prise)); String content8 = "¥"+price_after_coupons; canvas.drawText(content8,x+80,top2,TextPaint1); // //券背景 // Bitmap bitmap_q = BitmapFactory.decodeResource(getResources(), R.mipmap.qbs_q_back); // Bitmap bitmap_back = BitmapUtil.fitBitmap(bitmap_q,110); // canvas.drawBitmap(bitmap_back,330,top2-15,mPicturePaint2); if (!price_coupons.equals("")){ //券金额 TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(16); TextPaint1.setColor(getResources().getColor(R.color.detail_prise));//detail_prise String content4 = "券¥"; canvas.drawText(content4,340,top2,TextPaint1); TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(22); TextPaint1.setColor(getResources().getColor(R.color.detail_prise)); String content5 = price_coupons+""; canvas.drawText(content5,340+30,top2,TextPaint1); } //原价 TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(16); TextPaint1.setColor(getResources().getColor(R.color.theme_black2)); CharSequence content3 = "原价¥"; top2 = top2+40; canvas.drawText(content3,0,content3.length(),x,top2,TextPaint1); //原价金额 TextPaint1.setAntiAlias(true); TextPaint1.setTextSize(26); TextPaint1.setColor(getResources().getColor(R.color.theme_black2)); CharSequence content7 = price; canvas.drawText(content7,0,content7.length(),x+60,top2,TextPaint1); //商品图 // int logo = 0; // Logger.e(TAG,"图片宽"+resource.getWidth()+"图片高"+resource.getHeight()); Bitmap bitmap_shop = BitmapUtil.fitBitmap(resource,width-50); Logger.e(TAG,"图片宽"+bitmap_shop.getWidth()+"图片高"+bitmap_shop.getHeight()); top2 = top2+20; // canvas = new Canvas(mBitmap); // logo = top2; canvas.drawBitmap(bitmap_shop,x,top2,mPicturePaint2); //公司logo Bitmap bitmap_logo = BitmapFactory.decodeResource(getResources(), R.mipmap.ht_creat_logo);//qbs_creat_logo icon_yfg Bitmap bitmap_log = BitmapUtil.fitBitmap(bitmap_logo,150); canvas.drawBitmap(bitmap_log,150,width+top2,mPicturePaint2); //二维码合成 Bitmap Zxing = ZxingUtils.createQRCode(Wx_Url,300); int width1 = Zxing.getWidth(); int height1 = Zxing.getHeight(); Matrix matrix = new Matrix(); matrix.postScale(0.35f,0.35f); Bitmap bitmap1 = Bitmap.createBitmap(Zxing, 0, 0, width1, height1, matrix, true); Logger.e("二维码宽","二维码宽"+bitmap1.getWidth()); canvas.drawBitmap(bitmap1,353,width-20+top2,mPicturePaint1); canvas.save(); canvas.restore(); creat_pic.setImageBitmap(mBitmap); ``` ```
Android显示富文本,加载图片过多,内存溢出
最近在做Android的富文本显示时,使用的是底层的html解析类。 在解析图片时,先从服务器端或得图片资源生成bitmap文件,然后将bitmap文件放入Drawable中,返回Drawable。 问题是: 当图片过多时,在使用创建bitmap的createBitmap函数时,造成内存溢出。 请问各位大神,怎么破?应该在什么地方释放内存?怎么释放内存?
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Ol4网格生成以及优化
概述 先描述一下大致场景:以0.05为单元格大小生成网格,并在地图上绘制,绘制的时候需要区分海陆。本文以此需求为契机,简单描述一下该需求的实现以及如何来优化。 效果 实现 优化前 var source = new ol.source.Vector({ features: [] }); var vector = new ol.layer.Vector({ source...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
程序员该看的几部电影
1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?如何...
蓝桥杯知识点汇总:基础知识和常用算法
文章目录基础语法部分:算法竞赛常用API:算法部分数据结构部分 此系列包含蓝桥杯绝大部分所考察的知识点,以及真题题解~ 基础语法部分: 备战蓝桥杯java(一):一般输入输出 和 快速输入输(BufferedReader&amp;BufferedWrite) 备战蓝桥杯java(二):java编程规范和常用数据类型 备战蓝桥杯java(三):常用功能符以及循环结构和分支结构 备战蓝桥杯java(四...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
实现简单的轮播图(单张图片、多张图片)
前言 刚学js没多久,这篇博客就当做记录了,以后还会完善的,希望大佬们多多指点。ps:下面出现的都是直接闪动,没有滑动效果的轮播图。 单张图片的替换 · ...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 意思是密码。 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mkdir:Make directory ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问