转自:https://blog.csdn.net/LG1259156776/article/details/52006457?locationNum=10&fps=1

RGB组合格式

名字

RGB组合格式

描述

此格式用来匹配PC图形帧缓存。每个像素占据8,16,24或32个位,他们都是组合像素格式,其意为在内存中所有像素数据都是相邻排列的。当使用这些格式之一时,驱动应该上报颜色空间为V4L2_COLORSPACE_SRGB。

表2.6 组合RGB图像格式

定义 Byte 0 Byte 1 Byte 2 Byte 3
V4L2_PIX_FMT_RGB332 RGB1 r2 r1 r0 g2 g1 g0 b1 b0 - - -
V4L2_PIX_FMT_RGB444 R444 g3 g2 g1 g0 b3 b2 b1 b0 a3 a2 a1 a0 r3 r2 r1 r0 - -
V4L2_PIX_FMT_RGB555 RGBO g2 g1 g0 b4 b3 b2 b1 b0 a r4 r3 r2 r1 r0 g4 g3 - -
V4L2_PIX_FMT_RGB565 RGBP g2 g1 g0 b4 b3 b2 b1 b0 r4 r3 r2 r1 r0 g5 g4 g3 - -
V4L2_PIX_FMT_RGB555X RGBQ a r4 r3 r2 r1 r0 g4 g3 g2 g1 g0 b4 b3 b2 b1 b0 - -
V4L2_PIX_FMT_RGB565X RGBR r4 r3 r2 r1 r0 g5 g4 g3 g2 g1 g0 b4 b3 b2 b1 b0 - -
V4L2_PIX_FMT_BGR666 BGRH b5 b4 b3 b2 b1 b0 g5 g4 g3 g2 g1 g0 r5 r4 r3 r2 r1 r0 -
V4L2_PIX_FMT_BGR24 BGR3 b7 b6 b5 b4 b3 b2 b1 b0 g7 g6 g5 g4 g3 g2 g1 g0 r7 r6 r5 r4 r3 r2 r1 r0 -
V4L2_PIX_FMT_RGB24 RGB3 r7 r6 r5 r4 r3 r2 r1 r0 g7 g6 g5 g4 g3 g2 g1 g0 b7 b6 b5 b4 b3 b2 b1 b0 -
V4L2_PIX_FMT_BGR32 RGR4 b7 b6 b5 b4 b3 b2 b1 b0 g7 g6 g5 g4 g3 g2 g1 g0 r7 r6 r5 r4 r3 r2 r1 r0 a7 a6 a5 a4 a3 a2 a1 a0
V4L2_PIX_FMT_RGB32 RGB4 a7 a6 a5 a4 a3 a2 a1 a0 r7 r6 r5 r4 r3 r2 r1 r0 g7 g6 g5 g4 g3 g2 g1 g0 b7 b6 b5 b4 b3 b2 b1 b0

第7位是符号位,a(alpha)的值在读取驱动时并未定义,所以编写驱动时忽略它吧,除非是在Overlay或输出Overlay时候协商了透明度,又或是在使用V4L2_CID_ALPHA_COMPONENT控制视频捕捉时候设置透明度部分。

例2.2 V4L2_PIX_FMT_BGR24 4 x 4像素图像

  1.  
    start + 00: B00 G00 R00 B01 G01 R01 B02 G02 R02 B03 G03 R03
  2.  
    start + 12: B10 G10 R10 B11 G11 R11 B12 G12 R12 B13 G13 R13
  3.  
    start + 24: B20 G20 R20 B21 G21 R21 B22 G22 R22 B23 G23 R23
  4.  
    start + 36: B30 G30 R30 B31 G31 R31 B32 G32 R32 B33 G33 R33

V4L2_PIX_FMT_SBGGR8('BA81')

名字

V4L2_PIX_FMT_SBGGR8 贝尔RGB格式

描述

这一般是数字相机的本地格式,与CCD设备的传感器阵列对应。每个像素只有一个值或是红色、绿色、蓝色,丢失的部分必须由相邻像素插值而来。第一行从左到右由蓝色和绿色组成,第二行是绿色和红色,每两行/列以此类推。

例2.3 V4L2_PIX_FMT_SBGGR8 4 x 4像素图像

  1.  
    start + 0: B00 G01 B02 G03
  2.  
    start + 4: G10 R11 G12 R13
  3.  
    start + 8: B20 G21 B22 G23
  4.  
    start +12: G30 R31 G32 R33

V4L2_PIX_FMT_SGBRG8 ('GBRG')

名字

V4L2_PIX_FMT_SGBRG8 贝尔RGB格式

描述

贝尔格式描述基本相同,只是像素排列规则不同。此格式是第一行从做到有包含绿色和蓝色,第二行是红色和绿色,每两行/列依此类推。

例2.4 V4L2_PIX_FMT_SGBRG8 4 x 4像素图像

  1.  
    start + 0: G00 B01 G02 B03
  2.  
    start + 4: R10 G11 R12 G13
  3.  
    start + 8: G20 B21 G22 B23
  4.  
    start +12: R30 G31 R32 G33

V4L2_PIX_FMT_SGRBG8 ('GRBG')

名字

V4L2_PIX_FMT_SGRBG8 贝尔RGB格式

描述

第一行从左到右包含绿色和蓝色,第二行包含红色和绿色,每两行/列依此类推。

例2.5 V4L2_PIX_FMT_SGRBG8 4 x 4像素图像

  1.  
    start + 0: G00 R01 G02 R03
  2.  
    start + 4: R10 B11 R12 B13
  3.  
    start + 8: G20 R21 G22 R23
  4.  
    start +12: R30 B31 R32 B33

V4L2_PIX_FMT_SRGGB8 ('RGGB')

名字

V4L2_PIX_FMT_SRGGB8 贝尔RGB格式

描述

第一行从左到右包含红色和绿色,第二行包含绿色和蓝色,每两行/列依此类推。

例2.6 V4L2_PIX_FMT_SRGGB8 4 x 4像素图像

  1.  
    start + 0: R00 G01 R02 G03
  2.  
    start + 4: G10 B11 G12 B13
  3.  
    start + 8: R20 G21 R22 G23
  4.  
    start +12: G30 B31 G32 B33

V4L2_PIX_FMT_SBGGR16 ('BYR2')

名字

V4L2_PIX_FMT_SBGGR16 贝尔RGB格式

描述

此格式与V4L2_PIX_FMT_SBGGR8很相似,不同是每个像素拥有16位深度。低数据存储在小地址内存中(低位机)。实际采样精度可能会比16位低,必须每个像素10位,值范围0~1023(如MT9T001)。

例2.7 V4L2_PIX_FMT_SBGGR16 4 x 4像素图像

  1.  
    start + 0: B00low B00high G01low G01high B02low B02high G03low G03high
  2.  
    start + 8: G10low G10high R11low R11high G12low G12high R13low R13high
  3.  
    start +16: B20low B20high G21low G21high B22low B22high G23low G23high
  4.  
    start +24: G30low G30high R31low R31high G32low G32high R33low R33high

V4L2_PIX_FMT_SRGGB10 ('RG10'), V4L2_PIX_FMT_SGRBG10 ('BA10'), V4L2_PIX_FMT_SGBRG10 ('GB10'), V4L2_PIX_FMT_SBGGR10 ('BG10')

名字

V4L2_PIX_FMT_SRGGB10 ('RG10'), V4L2_PIX_FMT_SGRBG10 ('BA10'), V4L2_PIX_FMT_SGBRG10 ('GB10'), V4L2_PIX_FMT_SBGGR10 ('BG10') 10bit贝尔格式扩展的16位格式

描述

这4个像素格式是每个颜色10位的raw sRGB/贝尔格式。每个颜色部分都存储在16位字段中,高6位是不用的,填充0。每n像素行包含n/2个绿色取样和n/2个蓝色取样或红色取样,红色和蓝色行交替。字节以低位机序列存储。他们通常是来描述如GRGR...BGBG...或RGRG...GBGB...等等。以下是其中的一个例子。

例2.8 V4L2_PIX_FMT_SBGGR10 4 x 4像素图像

  1.  
    每个代表一个字节,高字节的高6位为0
  2.  
    start + 0: B00low B00high G01low G01high B02low B02high G03low G03high
  3.  
    start + 8: G10low G10high R11low R11high G12low G12high R13low R13high
  4.  
    start +16: B20low B20high G21low G21high B22low B22high G23low G23high
  5.  
    start +24: G30low G30high R31low R31high G32low G32high R33low R33high

V4L2_PIX_FMT_SBGGR10ALAW8 ('aBA8'), V4L2_PIX_FMT_SGBRG10ALAW8 ('aGA8'), V4L2_PIX_FMT_SGRBG10ALAW8 ('agA8'), V4L2_PIX_FMT_SRGGB10ALAW8 ('aRA8')

名字

V4L2_PIX_FMT_SBGGR10ALAW8 , V4L2_PIX_FMT_SGBRG10ALAW8 , V4L2_PIX_FMT_SGRBG10ALAW8 , V4L2_PIX_FMT_SRGGB10ALAW8 10位贝尔格式压缩至8位。

描述

这些格式是每个颜色10位的raw sRGB/贝尔格式压缩到8位,使用A-LAW算法。每个颜色部分在内存中占据8位,其他与V4L2_PIX_FMT_SRGGB8特性类似。

V4L2_PIX_FMT_SBGGR10DPCM8 ('bBA8'), V4L2_PIX_FMT_SGBRG10DPCM8 ('bGA8'), V4L2_PIX_FMT_SGRBG10DPCM8 ('BD10'), V4L2_PIX_FMT_SRGGB10DPCM8 ('bRA8')

名字

V4L2_PIX_FMT_SBGGR10DPCM8, V4L2_PIX_FMT_SGBRG10DPCM8, V4L2_PIX_FMT_SGRBG10DPCM8, V4L2_PIX_FMT_SRGGB10DPCM8 10位贝尔格式压缩至8位。

描述

使用DPCM将每个颜色部分压缩至8位。DPCM调整是有损耗的,每个颜色在内存中占用8位,其他部分与V4L2_PIX_FMT_SRGGB10 ('RG10'), V4L2_PIX_FMT_SGRBG10 ('BA10'), V4L2_PIX_FMT_SGBRG10 ('GB10'), V4L2_PIX_FMT_SBGGR10 ('BG10')类似。

V4L2_PIX_FMT_SRGGB12 ('RG12'), V4L2_PIX_FMT_SGRBG12 ('BA12'), V4L2_PIX_FMT_SGBRG12 ('GB12'), V4L2_PIX_FMT_SBGGR12 ('BG12')

名字

V4L2_PIX_FMT_SRGGB12, V4L2_PIX_FMT_SGRBG12, V4L2_PIX_FMT_SGBRG12, V4L2_PIX_FMT_SBGGR12 12位贝尔格式扩展为16位

描述

每个颜色12位的raw sRGB/贝尔格式,每个颜色部分被保存在16位的字段中,高6位为0。每个n像素行包含n/2个绿色取样及n/2个蓝色或红色取样,红、蓝行交替。字节按低位机顺序存储在内存中,通常用来描述如GEGE...BGBG...或RGRG...RBRB...等。下边是其中一个的例子。

例2.9 V4L2_PIX_FMT_SBGGR12 4 x 4像素图片

  1.  
    start + 0: B00low B00high G01low G01high B02low B02high G03low G03high
  2.  
    start + 8: G10low G10high R11low R11high G12low G12high R13low R13high
  3.  
    start +16: B20low B20high G21low G21high B22low B22high G23low G23high
  4.  
    start +24: G30low G30high R31low R31high G32low G32high R33low R33high

.........................................................................................................................

以下是根据上面的文档写的转换代码:RGGB/BGGR转RGB

  1. #include <fcntl.h>
  2. #include <getopt.h>
  3. #include <stdint.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/mman.h>
  8. #include <sys/stat.h>
  9. #include <sys/types.h>
  10. #include <unistd.h>
  11.  
  12. static void raw10_to_raw8(char *in, char *out, int width, int height)
  13. {
  14. int i,j;
  15. char temp;
  16. //RAW10 --> RAW8
  17. for(j = ; j < height; j++)
  18. {
  19. for(i = ; i < width * ; i = i + )
  20. {
  21. temp = ;
  22. temp = in[j * width * + i]; //low
  23. out[j * width + i / ] = temp;
  24.  
  25. /*
  26. temp = 0;
  27. temp = in[j * width * 2 + i] >> 2; //low
  28. temp |= in[j * width * 2 + i + 1] << 6; //high
  29. out[j * width + i / 2] = temp;
  30. */
  31. }
  32. }
  33.  
  34. //printf("aa0 %x %x %x %x \n", out[0], out[1], out[2], out[3]);
  35. //printf("aa1 %x %x %x %x \n", out[width], out[width+1], out[width+2], out[width+3]);
  36. }
  37.  
  38. #if 0
  39. static int rggb2rgb(char *in, char *out, int width, int height)
  40. {
  41. /*
  42. R G1 ---> RG1B RG1B
  43. G2 B ---> RG2B RG2B
  44. */
  45. int i,j;
  46.  
  47. //RGRGRG
  48. for(j = ; j < height; j= j + )
  49. {
  50. for(i = ; i < width * ; i = i + )
  51. {
  52. //(0,0)
  53. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //R
  54. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //G1
  55. out[(j * width * ) + (i + )] = in[((j+) * width) + (i / ) + ];//B
  56.  
  57. //(0,1) == (0,0)
  58. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //R
  59. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //G1
  60. out[(j * width * ) + (i + )] = in[((j+) * width) + (i / ) + ];//B
  61. }
  62. }
  63.  
  64. //GBGBGB
  65. for(j = ; j < height; j= j + )
  66. {
  67. for(i = ; i < width * ; i = i + )
  68. {
  69. //(1,0)
  70. out[(j * width * ) + (i + )] = in[((j-) * width) + (i / )]; //R
  71. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //G2
  72. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //B
  73.  
  74. //(1,0) == (1,1)
  75. out[(j * width * ) + (i + )] = in[((j-) * width) + (i / )]; //R
  76. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //G2
  77. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //B
  78. }
  79. }
  80. //printf("000 %x %x %x %x \n", out[0], out[1], out[2], out[3]);
  81. //printf("111 %x %x %x %x \n", out[width], out[width+1], out[width+2], out[width+3]);
  82.  
  83. return width * height * ;
  84. }
  85. #endif
  86.  
  87. #if 1
  88. static int bggr2rgb(char *in, char *out, int width, int height)
  89. {
  90. /*
  91. B G1 ---> RG1B RG1B
  92. G2 R ---> RG2B RG2B
  93. */
  94. int i,j;
  95.  
  96. //BGBGBG
  97. for(j = ; j < height; j= j + )
  98. {
  99. for(i = ; i < width * ; i = i + )
  100. {
  101. //(0,0)
  102. out[(j * width * ) + (i + )] = in[((j+) * width) + (i / ) + ];//R
  103. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //G1
  104. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //B
  105.  
  106. //(0,1) == (0,0)
  107. out[(j * width * ) + (i + )] = in[((j+) * width) + (i / ) + ];//R
  108. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //G1
  109. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //B
  110. }
  111. }
  112.  
  113. //GRGRGR
  114. for(j = ; j < height; j= j + )
  115. {
  116. for(i = ; i < width * ; i = i + )
  117. {
  118. //(1,0)
  119. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //R
  120. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //G2
  121. out[(j * width * ) + (i + )] = in[((j-) * width) + (i / )]; //B
  122.  
  123. //(1,0) == (1,1)
  124. out[(j * width * ) + (i + )] = in[(j * width) + (i / ) + ]; //R
  125. out[(j * width * ) + (i + )] = in[(j * width) + (i / )]; //G2
  126. out[(j * width * ) + (i + )] = in[((j-) * width) + (i / )]; //B
  127. }
  128. }
  129. //printf("000 %x %x %x %x \n", out[0], out[1], out[2], out[3]);
  130. //printf("111 %x %x %x %x \n", out[width], out[width+1], out[width+2], out[width+3]);
  131.  
  132. return width * height * ;
  133. }
  134. #endif
  135.  
  136. static void usage( char * name )
  137. {
  138. printf("usage: %s\n", name);
  139. printf(" --input,-i input file\n");
  140. printf(" --output,-o output file\n");
  141. printf(" --width,-w image width (pixels)\n");
  142. printf(" --height,-v image height (pixels)\n");
  143. printf(" --help,-h this helpful message\n");
  144. }
  145.  
  146. int main( int argc, char ** argv )
  147. {
  148. int width = ;
  149. int height = ;
  150. int size_in = ;
  151. int size_out = ;
  152. char c;
  153. int optidx = ;
  154.  
  155. char *infile = NULL;
  156. char *outfile = NULL;
  157. FILE *input_fd = NULL;
  158. FILE *output_fd = NULL;
  159.  
  160. char *buff_tmp = NULL;
  161. char *buff_in = NULL;
  162. char *buff_out = NULL;
  163.  
  164. int param_num = ;
  165. while (param_num--)
  166. {
  167. optidx = ;
  168. struct option longopt[] = {
  169. {"input",,NULL,'i'},
  170. {"output",,NULL,'o'},
  171. {"width",,NULL,'w'},
  172. {"height",,NULL,'v'},
  173. {"help",,NULL,'h'},
  174. {,,,}
  175. };
  176.  
  177. c = getopt_long(argc, argv, "i:o:w:v:h", longopt, &optidx);
  178. if (c == -)
  179. break;
  180.  
  181. switch ( c )
  182. {
  183. case 'i':
  184. infile = strdup( optarg );
  185. break;
  186. case 'o':
  187. outfile = strdup( optarg );
  188. break;
  189. case 'w':
  190. width = strtol( optarg, NULL, );
  191. break;
  192. case 'v':
  193. height = strtol( optarg, NULL, );
  194. break;
  195. case 'h':
  196. usage(argv[]);
  197. return ;
  198. break;
  199. default:
  200. printf("lsc bad arg %c\n", c);
  201. usage(argv[]);
  202. //return 1;
  203. }
  204. }
  205. // arguments: infile outfile width height
  206. if( infile == NULL || outfile == NULL || width == || height == )
  207. {
  208. printf("Bad parameter\n");
  209. usage(argv[]);
  210. return ;
  211. }
  212.  
  213. buff_tmp = calloc(width * height, sizeof(char));
  214. buff_in = calloc(width * height * , sizeof(char));
  215. buff_out = calloc(width * height * , sizeof(char));
  216. if(NULL == buff_tmp || NULL == buff_in || NULL == buff_out)
  217. {
  218. printf("malloc error\n");
  219. goto end;
  220. }
  221. input_fd = fopen(infile, "r");
  222. if(NULL == input_fd)
  223. {
  224. printf("Problem opening input: %s\n", infile);
  225. return ;
  226. }
  227.  
  228. output_fd = fopen(outfile, "w");
  229. if(NULL == output_fd)
  230. {
  231. printf("Problem opening output: %s\n", outfile);
  232. return ;
  233. }
  234.  
  235. //读文件
  236. size_in = fread(buff_in, , width * height * , input_fd);
  237. if(size_in != width * height * )
  238. {
  239. printf("error!! size_in != width * height 2, size_in= %d\n", size_in);
  240. goto end;
  241. }
  242.  
  243. raw10_to_raw8(buff_in, buff_tmp, width, height);
  244.  
  245. size_out = bggr2rgb(buff_tmp, buff_out, width, height);
  246.  
  247. //size_out = rggb2rgb(buff_tmp, buff_out, width, height);
  248.  
  249. //写入数据到文件
  250. fwrite(buff_out, , size_out, output_fd);
  251.  
  252. end:
  253. if(input_fd)
  254. fclose(input_fd);
  255. if(output_fd)
  256. fclose(output_fd);
  257.  
  258. if(NULL == buff_tmp)
  259. {
  260. free(buff_tmp);
  261. }
  262. if(NULL == buff_in)
  263. {
  264. free(buff_in);
  265. }
  266. if(NULL == buff_out)
  267. {
  268. free(buff_out);
  269. }
  270.  
  271. return ;
  272. }

【转】 RGB各种格式的更多相关文章

  1. 【VS开发】【图像处理】RGB各种格式

    RGB格式 RGB组合格式 名字 RGB组合格式 描述 此格式用来匹配PC图形帧缓存.每个像素占据8,16,24或32个位,他们都是组合像素格式,其意为在内存中所有像素数据都是相邻排列的.当使用这些格 ...

  2. yuv rgb 像素格式1

    ===========大小============= 一般,直接采集到的视频数据是RGB24的格式 RGB24一帧的大小size=width×heigth×3 Byte, RGB32的size=wid ...

  3. 嵌入式开发之davinci--- 8148/8168/8127 中的图像采集格式Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

    简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...

  4. RAW RGB格式

    RAW RGB格式 10bit Raw RGB, 就是说用10bit去表示一个R, G, 或者B, 通常的都是用8bit的. 所以你后面处理时要把它转换为8bit的, 比较简单的方法就是将低两位去掉, ...

  5. Sensor信号输出YUV、RGB、RAW DATA、JPEG【转】

    本文转载自:http://blog.csdn.net/southcamel/article/details/8305873 简单来说,YUV: luma (Y) + chroma (UV) 格式, 一 ...

  6. 多媒体编程基础之RGB和YUV

    一.概念 1.什么是RGB? 对一种颜色进行编码的方法统称为“颜色空间”或“色域”.用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量.RGB(红.绿.蓝)只是众多颜色空间 ...

  7. VLC 用到的那些 YUV 格式

    YUV是视频应用中使用的一类像素格式.YUV实际上是所有“YUV”像素格式共有的颜色空间的名称. 与RGB格式(红 - 绿 - 蓝)相对应,YUV颜色用一个称为Y(相当于灰度)的“亮度”分量和两个“色 ...

  8. Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别

    简单来说,YUV: luma (Y) + chroma (UV) 格式, 一般情况下sensor支持YUV422格式,即数据格式是按Y-U-Y-V次序输出的RGB: 传统的红绿蓝格式,比如RGB565 ...

  9. IPC网络高清摄像机基础知识4(Sensor信号输出YUV、RGB、RAW DATA、JPEG 4种方式区别) 【转】

    转自:http://blog.csdn.net/times_poem/article/details/51682785 [-] 一 概念介绍 二 两个疑问 三 RAW和JPEG的区别 1 概念说明 3 ...

随机推荐

  1. 部署WEB项目到服务器(二)安装tomcat到linux服务器(Ubuntu)详解

    突发奇想,想在自己电脑上部署一个web网站. 1,先去tomcat官网下载一个适合linux的版本:tar.gz 2,然后通过FileZIlla传到服务器的/opt目录: 3,然后创建目录 并解压缩 ...

  2. nessus无法访问https://localhost:8834/#/,解决方法。

    之前没弄明白为啥经常访问不了https://localhost:8834/#/,后面才发现是服务关闭了. 首先netstat -an 查看8834是否开启, 直接运行一下nessus目录下的nessu ...

  3. openERP笔记,自定义开发模块

    ##目标 OpenERP模块基本结构 使用模块添加额外的字段(Date Required和Rush Order) 扩展视图, 让OpenERP能够显示新的字段 修改用于OpenERP工作流的可用状态 ...

  4. JavaWeb & Tomcat

    1 JavaWeb概述 Java在服务器端的应用有Servlet,JSP和第三方框架等. Java的Web框架基本都遵循特定的路数:使用Servlet或者Filter拦截请求,使用MVC的思想设计架构 ...

  5. Tomcat的日志分割三种方法

    一.Tomcat的日志分割三种方法 一.方法一:用cronolog分割tomcat的catalina.out文件 Linux 日志切割工具cronolog详解:https://blog.csdn.ne ...

  6. PowerBI新功能: PowerBI多报表共享一个数据集

    在PowerBI里面建模,来来回回摸了一遍之后,肯定不想在另外一个报表的时候重复一次建模--这样不利于复用和维护. 四月份的更新版提供了一个预览功能(如下),可以让多报表(pbix)共享同一个数据集. ...

  7. c# Resolve SQlite Concurrency Exception Problem (Using Read-Write Lock)

    This article describes the c# example to solve the problem of SQlite concurrent exception method. To ...

  8. angularjs 绑定多个属性到下拉框

    绑定下拉框 angularjs  代码: //活动下拉切换 $scope.activityChange = function () { var cards = new Array(); var url ...

  9. CentOS 7 之 Systemd 入门教程:命令篇

    Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置 历史上,Linux 的启动一直采用init进程 下面的命令用来启动服务 [root@DaMoWang ~]# ...

  10. 51Nod 1185 威佐夫游戏 V2

    有2堆石子.A B两个人轮流拿,A先拿.每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取.拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出2堆石子的数量, ...