图像滤镜(GPUImage/GPU加速)、美化/图像处理技术 拼接及Skia- Android_skia图像马赛克添加和去除-程序员宅基地

技术标签: 图片 gpu  java  Android 图片拼接  Android 图片处理  Android  图片美颜  

图像滤镜处理的两种方式:RGB点乘运算;GPU的矩阵运算(效率更高).

> 图像像素处理
getPixel getPixels setPixel setPixels

Android Bitmap 加载与像素操作- https://blog.csdn.net/jia20003/article/details/46723903

基本滤镜效果的实现:如果我们用ColorMatrix调整RGB三种颜色的比重,就可以实现诸如单色、黑白的效果。
Lomo滤镜效果的实现:改变图像数值+遮罩.

> 图像处理技术:

[Android] 图像各种处理系列文章合集- http://blog.csdn.net/eastmount/article/details/40689397

  https://github.com/CyberAgent/android-gpuimage

Android实战经验之图像处理及特效处理的集锦(总结版)- https://www.oschina.net/question/231733_44154

Android图像处理整理- http://blog.csdn.net/luzhenyuxfcy/article/details/49427781

一个视频通信的基础架构可能涉及到采集(音视频采集)、前处理(例如噪声处理、人脸识别等)、音视频编解码、流媒体协议、系统架构(如数据库、文件系统)、CDN、播放控制(如音视频同步)和交互技术等。MediaCodec,MediaMuxer,MediaFormat等
Android视频编辑器(三)给本地视频加水印和美颜滤镜- http://blog.csdn.net/qqchenjian318/article/details/78274901
实时美颜滤镜(ColorMatrix)- https://github.com/Guikunzhi/BeautifyFaceDemo  https://github.com/BradLarson/GPUImage

图像滤镜处理算法:灰度、黑白、底片、浮雕 - http://www.icodelogic.com/?p=575
滤镜原理:
ios通过颜色矩阵(ColorMatrix)和坐标变换矩阵(Matrix)可以完美的做出上面的所说的效果。
视频滤镜,都是对视频中的图像帧进行操作来改变光影和色彩。

Android对于图片的处理,最常使用到的数据结构是位图——Bitmap,它包含了一张图片所有的数据。整个图片都是由点阵和颜色值组成的,所谓点阵就是一个包含像素的矩阵,每一个元素对应着图片的一个像素。而颜色值——ARGB,分别对应着透明度、红、绿、蓝这四个通道分量,他们共同决定了每个像素点显示的颜色。上图显示的就是色光三原色。

滤镜在色彩处理中,通常使用以下三个角度来描述一个图像:
色调——物体传播的颜色;
饱和度——颜色的纯度,从0(灰)到100%(饱和)来进行描述;
亮度——颜色的相对明暗程度;

在Android 的 ColorMatrix 颜色矩阵中也封装了一些 API 来快速调整上面这三个颜色参数,而不用每次都去计算矩阵的值。

美颜的实现的步骤是:https://www.2cto.com/kf/201604/498289.html
1.用具有保边效果的滤波算法对图像进行模糊处理
2.用肤色检测算法保护非皮肤区域
3.将模糊后的图像和原图进行图像融合
4.对融合后的图像进行锐化处理

硬件加速提高了Android系统显示和刷新的速度,但它也不是万能的,它有三个缺陷:
1.兼容性(部分绘制函数不支持或不完全硬件加速,参见文章尾)
2.内存消耗(OpenGL API调用就会占用8MB,而实际上会占用更多内存)
3.电量消耗(GPU耗电)


  开源图像库Skia: Skia 是完整的2D图像库,Google 一个底层的图形、图像、动画、 SVG 、文本/RGB(8byte – 32byte)编码(jpeg, png) 和解码功能等多方面的图形库,是 android 中图形系统的引擎。
Android图片解码流程:
1) APP:BitmapDecode.Java
2) API:BitmapFactory.java(static image)、Movie.java(dynamic image)
3) JNI:BitmapFactory.cpp(static image)、Movie.cpp(dynamic image)
4) C Native Service(Skia):SkImageDecoder.cpp(static image)、SkMovie.cpp(dynamic image)
  skia 源码解析 http://www.eoeandroid.com/thread-27841-1-1.html .libskia
  使用系统自带libjpeg时问题 http://stackoverflow.com/questions/5208817/failing-to-link-against-libjpeg-so-in-jni-ndk-shared-library .libjpeg是个跨平台的开源库.

Skia主要使用的第三方库:Zlib、Jpeglib、Pnglib、giflib、fpdfemb(处理pdf文档)。
Skia编译及调用 Android?
Skia调用OpenGL或OpenGL ES
包括遮罩、浮雕、模糊、滤镜、渐变色、离散、透明等,并且实现了PATH的各种特效;


图片绘制,PorterDuffXfermode,这是CoorChice,几幅图的实现Github:https://github.com/chenBingX/CoorChiceLibOne/blob/448cf36e0b33fb667cb4fd5a8d8db2651bf0647e/app/src/main/java/com/chenbing/coorchicelibone/Views/PorterDuffXDemoActivity.java


 以前Android是使用skia生成2D图形的,后来(4.1 Jellybean )为了提高性能,改为使用 opengl (因为可以可以gpu),但以前的skia软架构依旧保留.
 Android apk 里面的画图分为2D和3D两种:2D是由Skia 来实现的,也就是我们在框架图上看到的SGL,SGL也会调用部分opengl 的内容来实现简单的3D效果;3D部分是由OpenGL|ES实现的,OpenGL|ES是Opengl的嵌入式版本.
 opengl,因为它默认启用硬件渲染;android的skia不提供gpu模式
 surfaceHolder.lockCanvas() surfaceHolder.unlockCanvasAndPost() ; 

------------------------

>美颜和滤镜
  一般的思路是磨破+美白,即用类似双边滤波这样的边缘保持滤波器对肤色区域做平滑处理,然后做肤色的色调调节.
  根据rgb值识别皮肤部分,进行肤色调整,用具有保持边缘效果的滤波算法对图像进行模糊处理,用一些算法将模糊后的图像与原图进行融合,增加皮肤质感,此时的图片会有一些朦胧感,锐化可以强化边缘,让图像更加清晰。
  自动瘦脸与眼睛放大可以算作图像局部扭曲算法的一个应用,其参考文献可以追溯至1993年的一篇博士论文- http://www.gson.org/thesis/warping-thesis.pdf
  在1979年Lee发表的论文《Lee Filter Digital Image Enhancement and Noise Filtering by Use of Local Statistics》中,提出了基于局部信息去除加性噪音、乘性噪音及加性乘性混合噪音的方法,经过仔细的学习和编码,发现其去除加性噪音的方法效果非常好,具有现在一些EPF算法类似的边缘保留功能,并且其运算并不复杂,可以应用到类似于磨皮这种项目中。http://imagej.net/Integral_Image_Filters. 皮肤识别有很多算法.

  美白算法: 借用色彩平衡算法;使用logarithmic Curve;使用图层混合.

  对人脸进行美白、磨皮、瘦脸和大眼等美化功能;磨皮算法 实时滤镜
Smooth:皮肤平滑度,越高皮肤除;
Skin Color:皮肤.色,low为做红.处理;
Sharp:瘦脸&大眼程度,值越高表示程度越大。

------------------------

Bugs:
com.bumptech.glide.request.target.SquaringDrawable cannot be cast to android.graphics.drawable.BitmapDrawable:
Android 关于Glide的拓展(高斯模糊、加载监听、圆角图片)- http://blog.csdn.net/onceing/article/details/73277079


Android中GPU硬件加速控制及其在2D图形绘制上的局限- http://blog.csdn.net/iispring/article/details/49835061
Android 如何使用GPU硬件加速- http://blog.csdn.net/mandagod/article/details/48436123
This is a sobel filter on Android using OpenCL to accelerate.OPenCV
在Android上还实现了很多种并行化的算法,比如SHA-1、HDR、K-means、NL-means、SRAD等- https://github.com/WhiteIsClosing/Android-OpenCL-Sobel-Filter


Android平台美颜相机/Camera实时滤镜/视频编解码/影像后期/人脸技术探索-http://blog.csdn.net/martin20150405/article/details/54766660,
http://blog.csdn.net/Martin20150405/article/category/6274984
VR(全景视频播放器)App,相机App
 美丽的滤镜背后都是数学和艺术在支撑。相片磨皮
 基于GPU的图像处理和实时滤镜,鼎鼎大名的GPUImage
 GPUImage的项目结构其实很简单,android版本就更是简陋,结构如下:
 1.一堆滤镜(shader以及配套设置参数的代码)
 2.FilterGroup(利用FBO进行同一副图像的多次处理)
 3.EGL管理类(主要用来做离屏渲染)
虽然GPUImage的主要价值在那堆滤镜上,但是我们主要来分析后面两个,这是GPUImage的框架,而滤镜就像插件一样,想插就插:D,我们也可以依葫芦画瓢定制自己的滤镜。
  既然是图像处理,那么滤镜的操作就主要是:卷积、像素映射、坐标映射,反映到具体效果上,就是模糊锐化,覆盖层(贴纸等),RGB曲线调整,旋转缩放扭曲之类的。

> 快手、美拍、Instagram、OPPO/ViVO 等

> 滤镜功能

照片美妆---天天P图疯狂变脸特效算法研究- http://blog.csdn.net/trent1985/article/details/71446860
图像算法---磨皮算法研究汇总- http://blog.csdn.net/trent1985/article/details/50496969
人像美妆---妆容迁移算法研究(Makeup transfer)- http://blog.csdn.net/trent1985/article/details/70226779

图像处理(二十一)基于数据驱动的人脸卡通动画生成-Siggraph Asia 2014- http://blog.csdn.net/hjimce/article/details/47083321


  GPUImage是采用链式方法来处理画面,通过addTarget方法添加对象到链中,处理完一个target,就会吧上一个环节处理好的图像数据传递到下一个target处理,成为GPUImage处理链。
  GPU工作原理:CPU指定显示器工作,显示控制器根据CPU的控制到指定的地方去取数据和指令,目前的数据一般是从显存里取,如果显存里存不下,则从内存里取,内存也放不下,则从硬盘里取。
  滤镜处理的原理:就是把静态图片或者视频的每一帧进行图形变化后在显示到屏幕上,其本质就是像素点的坐标和颜色的变化。

  OpenGL ES程序处理图片的步骤:
1.初始化OpenGL ES 环境,编译、链接顶点着色器和片元着色器。
2.缓存顶点、纹理坐标数据,传送图像数据到GPU
3.绘制图元到特定的帧缓存;
4.在帧缓存去除绘制的图像。

  YUV是被欧洲电视系统索采用的一种颜色编码方法。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V分量,那么这样表示的图像就是黑白灰度图像,彩色电视采用YUV空间正式为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
  YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽。

滤镜功能-->

Android实现图像处理滤镜功能特效实现(资源下载)- http://download.csdn.net/detail/jasonez/8788931

[图片处理] 99种滤镜效果 ImageFilterForAndroid-master- http://download.csdn.net/download/cleopard/8454813
ImageFilterForAndroid图像渲染- http://download.csdn.net/detail/heng615975867/6593591
 图像处理滤镜/美化ImageFilterForAndroid- https://github.com/daizhenjun/ImageFilterForAndroid
android 图像处理滤镜系列合集- http://blog.csdn.net/jingwen3699/article/details/7770287


Android实战经验之图像处理及特效处理的集锦(总结版)- https://www.oschina.net/question/231733_44154
Android图片各种处理效果源码- http://download.csdn.net/download/lilidejing/7927579 

sangmingming/android-instagram-filter--  https://github.com/sangmingming/android-instagram-filter
imrunning/android-instagram-image-filter--  https://github.com/imrunning/android-instagram-image-filter

图像处理滤镜的话主要处理图片的三原色,并根据三原色进行运算
android 图像处理滤镜系列合集-- http://blog.csdn.net/jingwen3699/article/details/7770287

在MPAndroidChart库K线图的基础上画均线- http://blog.csdn.net/q4878802/article/details/50606718
MPAndroidChart图形联动- http://blog.csdn.net/q4878802/article/details/50464597
Android二维码扫描、生成(ZXing,ZBar)- http://blog.csdn.net/q4878802/article/details/50440807


  图像滤镜艺术- http://blog.csdn.net/Trent1985/article/category/2644207
  Instagram中最初的不到20个滤镜的代码与资源(InstagramFilters)- http://download.csdn.net/detail/oshunz/9335481

ImageFilterForAndroid-master- http://download.csdn.net/detail/cleopard/8454813
如何制作摄影类 app 中的滤镜- https://www.zhihu.com/question/20073281
如何制作摄影类 app 中的滤镜?- https://github.com/YuAo/YUCIHighPassSkinSmoothing
opencv,图像处理的第三方库很多。
数字图像处理研究- http://blog.csdn.net/Trent1985/article/category/1850555
图像处理,图像分割,特征提取,机器学习,模式识别,深度学习等- http://blog.csdn.net/real_myth?viewmode=contents


OpenGL实践- http://blog.csdn.net/wangkuifeng0118/article/category/1115152

OpenCV 3.1.0编译与添加扩展模块- http://blog.csdn.net/jia20003/article/details/54583431

> 贴图

android ndk调用OpenGL 实现纹理贴图Texture- http://blog.csdn.net/chrisfxs/article/details/34359265
http://download.csdn.NET/detail/chrisfxs/7547637

> 图片分片,拼图游戏可以用到

【Android图像处理】将一张图片切成许多碎片- http://blog.csdn.net/qq_32353771/article/details/53215322
[Android] Android中将一个图片切割成多个图片- http://blog.csdn.net/arui319/article/details/7470193

> android拼接多张bitmap图片- http://blog.csdn.net/ajun495175289/article/details/18091683

/**
* 横向拼接
* <功能详细描述>
* @param first
* @param second
* @return 
*/
private Bitmap add2Bitmap(Bitmap first, Bitmap second) {
int width = first.getWidth() + second.getWidth();
int height = Math.max(first.getHeight(), second.getHeight());
Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(first, 0, 0, null);
canvas.drawBitmap(second, first.getWidth(), 0, null);
return result;

}


/**
* 纵向拼接
* <功能详细描述>
* @param first
* @param second
* @return 
*/
private Bitmap addBitmap(Bitmap first, Bitmap second) {
int width = Math.max(first.getWidth(),second.getWidth());
int height = first.getHeight() + second.getHeight();
Bitmap result = Bitmap.createBitmap(width, height, Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(first, 0, 0, null);
canvas.drawBitmap(second, first.getHeight(), 0, null);
return result;
}


> 1.图片倒影,其原理基本上就是将原图倒置,画在画布上,然后加上一个半透明的蒙版
public static Bitmap createReflectedImage(Bitmap originalImage)  
    {  
        int width = originalImage.getWidth();  
        int height = originalImage.getHeight();  
        Matrix matrix = new Matrix();  
        // 实现图片翻转90度  
        matrix.preScale(1, -1);  
        // 创建倒影图片(是原始图片的一半大小)  
        Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0, height / 2, width, height / 2, matrix, false);  
        // 创建总图片(原图片 + 倒影图片)  
        Bitmap finalReflection = Bitmap.createBitmap(width, (height + height / 2), Config.ARGB_8888);  
        // 创建画布  
        Canvas canvas = new Canvas(finalReflection);  
        canvas.drawBitmap(originalImage, 0, 0, null);  
        //把倒影图片画到画布上  
        canvas.drawBitmap(reflectionImage, 0, height + 1, null);  
        Paint shaderPaint = new Paint();  
        //创建线性渐变LinearGradient对象  
        LinearGradient shader = new LinearGradient(0, originalImage.getHeight(), 0, finalReflection.getHeight() + 1, 0x70ffffff,  
                0x00ffffff, TileMode.MIRROR);  
        shaderPaint.setShader(shader);  
        shaderPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  
        //画布画出反转图片大小区域,然后把渐变效果加到其中,就出现了图片的倒影效果。  
        canvas.drawRect(0, height + 1, width, finalReflection.getHeight(), shaderPaint);  
        return finalReflection;  
    }  
> 2.图片阴影,在一个圆角矩形的图片四周加上阴影效果,在原图四边加上矩形的阴影,然后在四个圆角的地方画扇形阴影来实现。
Android图片添加阴影效果的两种方式- http://blog.csdn.net/u011421608/article/details/51923812
public static Bitmap createShadowBitmap(Bitmap orignalBitmap,  
            int shadowMargin, int iconCornerRadius) {  
        int w = orignalBitmap.getWidth();  
        int h = orignalBitmap.getHeight();  
        Bitmap shadowBitmap = Bitmap.createBitmap(w + shadowMargin * 2, h  
                + shadowMargin * 2, Config.ARGB_8888);  
        int width = shadowBitmap.getWidth();  
        int height = shadowBitmap.getHeight();  
        Canvas canvas = new Canvas(shadowBitmap);  
        canvas.drawBitmap(orignalBitmap, shadowMargin, shadowMargin, null);  
        Paint paint = new Paint();  
        paint.setXfermode(new PorterDuffXfermode(Mode.DST_OVER));  
        int radius = shadowMargin + iconCornerRadius;  
        // 四个边的阴影效果,采用线性阴影,宽度等于阴影边距+圆角半径  
        LinearGradient leftGradient = new LinearGradient(radius, 0, 0, 0,  
                0x7F000000, 0x00000000, TileMode.CLAMP);  
        LinearGradient rightGradient = new LinearGradient(width - radius, 0,  
                width, 0, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        LinearGradient topGradient = new LinearGradient(0, radius, 0, 0,  
                0x7F000000, 0x00000000, TileMode.CLAMP);  
        LinearGradient bottomGradient = new LinearGradient(0, height - radius,  
                0, height, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        paint.setShader(leftGradient);  
        canvas.drawRect(0, radius, radius, height - radius, paint);  
        paint.setShader(rightGradient);  
        canvas.drawRect(width - radius, radius, width, height - radius, paint);  
        paint.setShader(topGradient);  
        canvas.drawRect(radius, 0, width - radius, radius, paint);  
        paint.setShader(bottomGradient);  
        canvas.drawRect(radius, height - radius, width - radius, height, paint);  
        // 四个角的阴影效果,采用圆形阴影,半径等于阴影边距+圆角半径  
        RadialGradient topLeftCornerGradient = new RadialGradient(radius,  
                radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        RadialGradient topRightCornerGradient = new RadialGradient(width  
                - radius, radius, radius, 0x7F000000, 0x00000000,  
                TileMode.CLAMP);  
        RadialGradient bottomLeftCornerGradient = new RadialGradient(radius,  
                height - radius, radius, 0x7F000000, 0x00000000, TileMode.CLAMP);  
        RadialGradient bottomRightCornerGradient = new RadialGradient(width  
                - radius, height - radius, radius, 0x7F000000, 0x00000000,  
                TileMode.CLAMP);  
        // 画四个角,就是画四个圆心角为90度的扇形,drawArc函数第一个参数为圆弧所在圆的的外接矩形,第二个参数为起始角度,第三个参数为扇形顺时针滑过的角度,第四个参数如果为true时,在绘制圆弧时将圆心包括在内(用来画扇形),第五个参数为画笔  
        paint.setShader(topLeftCornerGradient);  
        canvas.drawArc(new RectF(0, 0, radius * 2, radius * 2), 180, 90, true,  
                paint);  
        paint.setShader(topRightCornerGradient);  
        canvas.drawArc(new RectF(width - radius * 2, 0, width, radius * 2),  
                270, 90, true, paint);  
        paint.setShader(bottomLeftCornerGradient);  
        canvas.drawArc(new RectF(0, height - radius * 2, radius * 2, height),  
                90, 90, true, paint);  
        paint.setShader(bottomRightCornerGradient);  
        canvas.drawArc(new RectF(width - radius * 2, height - radius * 2,  
                width, height), 0, 90, true, paint);  
        return shadowBitmap;  
    }

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u010052279/article/details/80627387

智能推荐

模拟神器之QEMU-程序员宅基地

文章浏览阅读1.3w次,点赞6次,收藏48次。1. 简介QEMU(quick emulator)是一款由法布里斯·贝拉(Fabrice Bellard)等人编写的免费的可执行硬件虚拟化的(hardware virtualization)开源托管虚拟机(VMM)。QEMU 是一个托管的虚拟机镜像,它通过动态的二进制转换,模拟CPU,并且提供一组设备模型,使它能够运行多种未修改的客户机OS,可以通过与KVM一起使用进而接近本地速度运行虚拟机(接近真实电脑的速度)。QEMU还可以为user-level的进程执行CPU仿真,进而允许了为一种架构编译的程序_qemu

【最详细|附源码】Visual C++(VC)6.0最新安装教程_visual c++安装教程-程序员宅基地

文章浏览阅读1.4w次,点赞14次,收藏78次。软件:Visual C++版本:6.0语言:简体中文大小:34.26M安装环境:Win11/Win10/Win8/Win7硬件要求:[email protected] 内存@4G(或更高)下载通道①百度网盘丨下载链接:提取码:dg2n[更多软件]:点击进入管家「软件目录」!_visual c++安装教程

新路由3 高恪魔改固件+底包_新路由3高恪5.0nat1-程序员宅基地

文章浏览阅读2.7w次,点赞2次,收藏8次。新路由3 newifi3 d2 高恪魔改固件,请在breed中先刷入底包,然后启动路由器进入底包系统后,再在底包系统里面网页web升级固件,选择魔改进行升级,切记必须这样操作。压缩包包含了底包和固件解压密码 123下载地址:https://u13909188.pipipan.com/fs/13909188-384246318..._新路由3高恪5.0nat1

戳破“砖家”假面:唯快不破的时代,为什么这件事一定要慢慢做?-程序员宅基地

文章浏览阅读298次。导读:我们生活在一个嘈杂、混乱的世界中。生活中,我们有很多“权威”和“专家”,他们标榜自己是内行人,宣称自己掌握着该领域的真理,而我们需要做的只有两个字——接受。但事实上..._唯快不破的人为什么定

初始化时checkbox选中问题-程序员宅基地

文章浏览阅读746次。首先我们大家在写页面的时候可能回经常遇到checkbox、radio等一些使选中或者是不选中的问题。这是我在项目当中做的时候发现的一个小知识点,把它赶紧记录下来。以便以后复习与巩固。 现把代码写出来再解释: function operateCheckOrRadio() { var sForm = document.getElementById("sform"); var sStatus = d..._flutter checkbox用变量初始化无法设置为选中状态

UE5——问题——MediaPlayer的使用播放视频注意点_ue mediaplayer-程序员宅基地

文章浏览阅读1.1k次。UE5——问题——MediaPlayer的使用播放视频注意点_ue mediaplayer

随便推点

欧拉图和哈密顿图_哈密顿通路度为偶数-程序员宅基地

文章浏览阅读3.8k次。欧拉图及欧拉路径欧拉图 如果图G上有一条经过所有顶点、所有边的闭路径(边不重复,顶点可以重复)充分必要条件 无向图:G连通,所有顶点的度都是偶数有向图:G弱连通,每个顶点出度与入度相等欧拉路径 如果图G上有一条经过所有顶点、所有边的路径(边不重复,顶点可以重复)充分必要条件 无向图:G连通,恰有两个顶点的度是奇数有向图:G连通,恰有两个顶点的出度与入度不相等,其中一个出度比入度多_哈密顿通路度为偶数

Linux下SVN安装配置和使用中遇到的问题-程序员宅基地

文章浏览阅读68次。两个命令:svn info :显示版本库信息,svn的下载url等。svn co https://xxxxx/xxx wodemulu (通过我的目录制定co的文件夹)svn st:显示修改的文件。=-=========================================第一章 安装1. 采用源文件编译安装。源文件共两个(可下载完传入linux),为:s..._can't lunch modelsim make sure

【算法】设计算法求所有强连通分量的完整代码(kosaraju算法)_kosaraju算法代码-程序员宅基地

文章浏览阅读332次。代码:typedef struct anode { int adjvex;//该边的邻接点编号 struct anode* nexarc;//指向下一条边的指针 int weight;//该边的相关信息,比如权值}arcnode;//边结点类型typedef struct vnode { //InfoTyoe info; 顶点的其他信息 arcnode* firstarc;//指向第一个边结点}Vnode;//邻接表头结点类型typedef struct {_kosaraju算法代码

程序员的自我评价_程序员自我评价-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏2次。篇一:程序员简历自我评价程序员简历自我评价本人勤奋踏实,工作认真负责,自学能力强;性格开朗,容易与人相处,注重团队协作精神,且能承受较大压力。注重专业基础学习和实践能力的培养,在校期间不仅做过多个课程设计暑假期间也去过单位实践过,对java编程和网站开发具有浓厚的兴趣。篇二:优秀的程序员自我鉴定优秀的程序员自我鉴定以下一篇是一名优秀并且有工作经验的程序员的自我鉴定范文:大家好,我叫xxx。我性格开朗,乐于与人交往,诚实,正直,有教强的上进心,较强的学习能力,在学校团学会的工作使我组织_程序员自我评价

vue的vue-resource和axios介绍_vue-resuorce-程序员宅基地

文章浏览阅读1.2k次,点赞26次,收藏14次。vue的vue-resource和axios介绍_vue-resuorce

MySQL笔记复习(实例 全)_在 goods_name 列上加普通索引-程序员宅基地

文章浏览阅读907次。mysql复习一:复习前的准备1:确认你已安装wamp2:确认你已安装ecshop,并且ecshop的数据库名为shop二 基础知识:1.数据库的连接mysql -u -p -h-u 用户名-p 密码-h host主机2:库级知识2.1 显示数据库: show databases;2.2 选择数据库: use dbname;2.3 创建数据库_在 goods_name 列上加普通索引

推荐文章

热门文章

相关标签