-
如何创建文字图片
2016-08-10 15:59:09首先要搞明白,什么场景下会用到文字图片?在回答这个问题前,我们需要有个共识,所有的GDI函数都不能处理Alpha channel,除了AlphaBlend函数(但是这个函数只是从一个DC拷贝目的DC,并不能直接控制Alpha,需要通过...一次,同事向我请教如何创建文字图片的问题,我想因该是不难的,但是效果总是出不来,我俩为此用了一下午的时间来解决这个问题,后来在一篇外文上找到了解决方案,用它的一试,效果是出来了。问题是有几处关键的代码,我们弄不明白,资料又无从查起,这让我们很老火;都知道做技术的,对所在技术不明其理,那是不行的。 当然我们运气好,最终弄明白了那些代码的含义。归根结底,就是GDI API函数忽略了Alpha值的问题。借此总结下心得,以备自用。
首先要搞明白,什么场景下会用到文字图片?在回答这个问题前,我们需要有个共识,所有的GDI函数都不能处理Alpha channel,除了AlphaBlend函数(但是这个函数只是从一个DC拷贝目的DC,并不能直接控制Alpha,需要通过CreateDIBSection函数创建一个带Alpha channel的HBITMAP,然后选到内存DC里去进行操作。),如果在内存DC里调用DrawText或TextOut绘制文本,那么他的alpha值就全是零。然后调用AlphaBlend函数,把内存DC复制到目的DC,就会导致文字区域显示透明,看不见。所以为了解决这个问题,我们就要用到文字图片,或者用GDI+绘制,GDI+没有Alpha的问题。
HBITMAP CreateAlphaTextBitmap(LPCSTR inText, HFONT inFont, COLORREF inColour) { int TextLength = (int)strlen(inText); if (TextLength <= 0) return NULL; // Create DC and select font into it HDC hTextDC = CreateCompatibleDC(NULL); HFONT hOldFont = (HFONT)SelectObject(hTextDC, inFont); HBITMAP hMyDIB = NULL; // Get text area RECT TextArea = {0, 0, 0, 0}; DrawText(hTextDC, inText, TextLength, &TextArea, DT_CALCRECT); if ((TextArea.right > TextArea.left) && (TextArea.bottom > TextArea.top)) { BITMAPINFOHEADER BMIH; memset(&BMIH, 0x0, sizeof(BITMAPINFOHEADER)); void *pvBits = NULL; // Specify DIB setup BMIH.biSize = sizeof(BMIH); BMIH.biWidth = TextArea.right - TextArea.left; BMIH.biHeight = TextArea.bottom - TextArea.top; BMIH.biPlanes = 1; BMIH.biBitCount = 32; BMIH.biCompression = BI_RGB; // Create and select DIB into DC hMyDIB = CreateDIBSection(hTextDC, (LPBITMAPINFO)&BMIH, 0, (LPVOID*)&pvBits, NULL, 0); HBITMAP hOldBMP = (HBITMAP)SelectObject(hTextDC, hMyDIB); if (hOldBMP != NULL) { // Set up DC properties SetTextColor(hTextDC, 0x00FF0000); SetBkMode(hTextDC, TRANSPARENT); // Draw text to buffer DrawText(hTextDC, inText, TextLength, &TextArea, DT_NOCLIP); BYTE* DataPtr = (BYTE*)pvBits; BYTE FillR = GetRValue(inColour); BYTE FillG = GetGValue(inColour); BYTE FillB = GetBValue(inColour); BYTE ThisA; for (int LoopY = 0; LoopY < BMIH.biHeight; LoopY++) { for (int LoopX = 0; LoopX < BMIH.biWidth; LoopX++) { ThisA = *DataPtr; // Move alpha and pre-multiply with RGB *DataPtr++ = (FillB * ThisA) >> 8; *DataPtr++ = (FillG * ThisA) >> 8; *DataPtr++ = (FillR * ThisA) >> 8; *DataPtr++ = ThisA; // Set Alpha } } // De-select bitmap SelectObject(hTextDC, hOldBMP); } } // De-select font and destroy temp DC SelectObject(hTextDC, hOldFont); DeleteDC(hTextDC); // Return DIBSection return hMyDIB; }
代码取至http://stackoverflow.com/questions/5309914/updatelayeredwindow-and-drawtextvoid TestAlphaText(HDC inDC, int inX, int inY) { const char *DemoText = "Hello World!\0"; RECT TextArea = {0, 0, 0, 0}; HFONT TempFont = CreateFont(50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "Arial\0"); HBITMAP MyBMP = CreateAlphaTextBitmap(DemoText, TempFont, 0xFF); DeleteObject(TempFont); if (MyBMP) { // Create temporary DC and select new Bitmap into it HDC hTempDC = CreateCompatibleDC(inDC); HBITMAP hOldBMP = (HBITMAP)SelectObject(hTempDC, MyBMP); if (hOldBMP) { // Get Bitmap image size BITMAP BMInf; GetObject(MyBMP, sizeof(BITMAP), &BMInf); // Fill blend function and blend new text to window BLENDFUNCTION bf; bf.BlendOp = AC_SRC_OVER; bf.BlendFlags = 0; bf.SourceConstantAlpha = 0x80; bf.AlphaFormat = AC_SRC_ALPHA; AlphaBlend(inDC, inX, inY, BMInf.bmWidth, BMInf.bmHeight, hTempDC, 0, 0, BMInf.bmWidth, BMInf.bmHeight, bf); // Clean up SelectObject(hTempDC, hOldBMP); DeleteObject(MyBMP); DeleteDC(hTempDC); } } }
我们先来分析下CreateAlphaTextBitmap函数,这个函数功能是创建带alpha channel的文本,返回HBTIMAP。主流程是:
1、首先创建内存DC、字体选到内存DC里、获取文本的区域;
2、然后调用CreateDIBSection创建带有alpha通道的HBITMAP、把HBITMAP选进内存DC;然后调用SetTextColor设置文本的颜色,这里需要注意的是,这个颜色并不是最终
绘制出来的颜色,最终的颜色是由inColour值决定。这里0x00FF0000值的顺序是ARGB,但是在内存的布局顺序是BGRA,这个认识很重要。接着因为不需要文字背景,所 以调用SetBkMode(hTextDC, TRANSPARENT);然后就是绘制文本
3、最后改变每个像素的Alpha值、颜色值。先取出第一个字节的值保存下来,前面说过,在内存里的布局顺序BGRA,第一个字节是Blue,在像素扫描过程中,大部分时候Blue值都是0,只有经过文字区域时,Blue值是由之前设置的文本颜色0x00FF0000决定的,所以文本区域Blue是FF; 知道了这个理解起来就相当的容易了,接下来就是分别取出颜色值填充。
然后就是TestAlphaText函数,这个函数很简单,就是调用CreateAlphaTextBitmap函数获取HBITMAP,然后把HBITMAP选进内存DC,最后调用AlphaBlend函数把文字图片画到指定的DC上去。
效果图:
-
详解如何创建带图片的pdf
2018-11-16 22:48:34在上一篇文章itextpdf基本使用中介绍了itextpdf开源库创建pdf的步骤和创建基本文本pdf的方法以及一些常用的设置,对这个开源库还不熟悉的朋友请到前面文章中了解下,今天介绍itext创建带图片pdf的一...随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、可加微信技术交流群、QQ技术交流群(183198395)。
在上一篇文章itextpdf基本使用中介绍了itextpdf开源库创建pdf的步骤和创建基本文本pdf的方法以及一些常用的设置,对这个开源库还不熟悉的朋友请到前面文章中了解下,今天介绍itext创建带图片pdf的一些基本方法。
基本方法,创建带图片的pdf:
/** * 创建图片pdf示例 * * @param outPath * @throws IOException * @throws DocumentException */ public static void createImgPDF(String outPath) throws IOException, DocumentException { File file = new File(outPath); file.getParentFile().mkdirs(); Document document = new Document(); // 创建PdfWriter对象 PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(outPath)); // 设置图片精确放置 writer.setStrictImageSequence(true); // 打开文档 document.open(); // 添加本地图片 Image image1 = Image.getInstance(IMG1); // 设置位置,以左下角为原点 image1.setAbsolutePosition(50f, 700f); // 设置居中 image1.setAlignment(Image.MIDDLE); // 设置居左 image1.setAlignment(Image.LEFT); // 设置居右 image1.setAlignment(Image.RIGHT); // 设置文字绕图形显示 image1.setAlignment(Image.TEXTWRAP); // 设置图形作为文字的背景显示 image1.setAlignment(Image.UNDERLYING); // 也可以综合上面使用 image1.setAlignment(Image.RIGHT | Image.TEXTWRAP); // 按百分比缩放 image1.scalePercent(50); // 根据宽高分别缩放 image1.scalePercent(50, 70); // 设置到绝对大小 image1.scaleAbsolute(100, 100); document.add(image1); // 添加网络图片,设置同上 Image image2 = Image.getInstance(new URL(IMGURL)); document.add(image2); // low level PdfContentByte cb = writer.getDirectContent(); cb.fill(); cb.sanityCheck(); // 关闭文档 document.close(); }
基本思路跟添加段落是一样的,上面代码有详细注释,支持本地路径和网络地址,可以设置图片大小、位置等等,添加图片的基本使用就是这样,下面列举几个itext官方比较实用的方法:
1、对存在的pdf添加图片
/** * 在存在的pdf中添加图片 * * @param src * @param dest * @throws IOException * @throws DocumentException */ public static void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); Image image = Image.getInstance(IMG1); PdfImage stream = new PdfImage(image, "", null); stream.put(new PdfName("ITXT_SpecialId"), new PdfName("123456789")); PdfIndirectObject ref = stamper.getWriter().addToBody(stream); image.setDirectReference(ref.getIndirectReference()); image.setAbsolutePosition(36, 400); image.scaleAbsolute(100, 100); PdfContentByte over = stamper.getOverContent(1); over.addImage(image); stamper.close(); reader.close(); }
2、创建带水印的图片
/** * 创建带水印的PDF * * @param dest * @throws IOException * @throws DocumentException */ public static void createWatermarkedPdf(String dest) throws IOException, DocumentException { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); PdfContentByte cb = writer.getDirectContentUnder(); document.add(getWatermarkedImage(cb, Image.getInstance(IMG1), "watermark1")); Image img = Image.getInstance(IMG2); img.scaleToFit(100, 100); document.add(getWatermarkedImage(cb, img, "watermark2")); document.close(); }
步骤跟添加图片一样,关键方法是生成带水印的图片:
/** * 生成水印图片 * * @param cb * @param img * @param watermark * @return * @throws DocumentException */ public static Image getWatermarkedImage(PdfContentByte cb, Image img, String watermark) throws DocumentException { // 获取原图片的宽 float width = img.getScaledWidth(); // 获取原图片的高 float height = img.getScaledHeight(); // 创建模板 PdfTemplate template = cb.createTemplate(width, height); // 添加图片 template.addImage(img, width, 0, 0, height, 0, 0); // 设置文本以及位置、偏移、旋转 ColumnText.showTextAligned(template, Element.ALIGN_CENTER, new Phrase(watermark, FONT), width / 2, height / 2, 30); Image newImage = Image.getInstance(template); newImage.scaleAbsolute(100, 100); return newImage; }
关于字体的设置在上一篇已经介绍,这里就不再重复了。效果如下:
水印一般用白色,这里为了看起来明显就用的黑色。
3、创建背景图
/** * 创建背景图 * * @param dest * @throws IOException * @throws DocumentException */ public static void createBackgroundPdf(String dest) throws IOException, DocumentException { Document document = new Document(PageSize.A4.rotate()); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); document.add(new Paragraph("大家好,这里是源代码社区!", FONT)); PdfContentByte canvas = writer.getDirectContentUnder(); Image image = Image.getInstance(BACKGROUD_IMG); image.scaleAbsolute(PageSize.A4.rotate().getWidth(), PageSize.A4.rotate().getHeight()); image.setAbsolutePosition(0, 0); canvas.addImage(image); document.close(); }
就是将图片大小设置为A4文档大小,从起点开始铺满整个页面,效果如下:
还可以将背景设置半透明,弱化下背景效果:
/** * 创建半透明背景图 * * @param dest * @throws IOException * @throws DocumentException */ public static void createBackgroundTransparentPdf(String dest) throws IOException, DocumentException { Document document = new Document(PageSize.A4.rotate()); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); document.add(new Paragraph("大家好,这里是源代码社区!", FONT)); PdfContentByte canvas = writer.getDirectContentUnder(); Image image = Image.getInstance(BACKGROUD_IMG); image.scaleAbsolute(PageSize.A4.rotate().getWidth(), PageSize.A4.rotate().getHeight()); image.setAbsolutePosition(0, 0); canvas.saveState(); PdfGState state = new PdfGState(); state.setFillOpacity(0.6f); canvas.setGState(state); canvas.addImage(image); canvas.restoreState(); document.close(); }
效果如下:
效果是不是弱了许多呢,上面介绍的一些方法都是非常实用的代码,当然这个库里面还有很多操作图片的功能,详细用法可以itextpdf官网看API。
-
关于Unity如何创建静态动画图片
2016-11-11 16:25:181.先创建一个图片 2.选中这个图片,选择Window窗口 3.打开window下的Animation 4.然后点击创建一个新的Animation动画文件 5.点击Add Property下的Image(script)下的Sprite,即创建了一个图片动画机 6.将...1.先创建一个UI--Image图片
2.选中这个图片,选择Window窗口下的Animation
3.然后点击创建一个新的Animation动画片段(会自动生成相应的动画机,名字为物体名)
4.点击Add Property下的Image(script)下的Sprite,即创建了一个2D精灵图片帧动画
5.将组成该动画的所有图片按照顺序拖到相应帧数处。最后保存,即创建成功静态图片的动画(第一个创建的是默认动画,可在动画状态机里做相应设置)。
-
如何创建webp格式的图片
2016-06-22 20:07:47Webp格式,是谷歌开发的一种旨在加快图片加载速度的图片格式.该格式的图片体积大约只有JPEG格式图片的2/3,并能节省大量的服务器宽带资源和数据空间.Facebook Ebay等知名网站已经测试并使用Webp格式. 但有一点是需要...首先说一下Webp是什么?
Webp格式,是谷歌开发的一种旨在加快图片加载速度的图片格式.该格式的图片体积大约只有JPEG格式图片的2/3,并能节省大量的服务器宽带资源和数据空间.Facebook Ebay等知名网站已经测试并使用Webp格式.
但有一点是需要注意的,那就是只有安卓4.0+才原生支持Webp,所以4.0以下的设备将无法看到图片.
好了,下面说一下将jpg/png等格式的图片转成Webp格式的图片的流程:
1.首先需要下载libwebp工具,并解压.
2.将要转换格式的jpg/png/gif等格式的图片移动到解压文件的bin文件夹下.
3.在bin文件夹中打开cmd.exe,将当前目录中的cwebp.exe文件拖动到cmd中,回车,会出现提示语句,按照提示语句进行操作即可.
例如:要将当前目录中的1.jog进行转换,可在cmd中输入 cwebp -q 75 1.jpg -o 1.webp 然后回车,即在当前目录中生成1.webp文件.
说明:75是指quality 质量.
小伙伴们自己试一下,可以发现转换
好了,以上与大家分享.
-
如何创建圆形头像和圆角图片
2015-08-12 10:03:37这篇短文中,我们将探讨CALayer类,以及如何运用它来创建圆形图像或圆角图像。 您可能并没有听说过CALayer类。但是,如果你曾经创建过应用程序,那么你应该以某种方式使用过它。UIKit中的每个视图(例如UIView、... -
如何创建svg图片,svg图片转换以及导入到android studio中使用
2019-02-19 10:35:36最近更新了android studio,一些原有的svg图片突然用不了了。一开始我以为我的android studio有问题,因为图片在android studio2.2.3并且在朋友的3.3版本下都是可以使用的,在多方调试下,还是没能找出原因所在,... -
如何创建域(图片说明)
2011-06-22 10:14:00用Windows 2000创建域并不难,在创建域之前需要做一些准备工作,首先必须满足以下条件:1. 必须安装了Windows 2000 Server、Windows 2000 Advance Server或者Windows 2000 DataCenter Server其中任何一种操作系统。2... -
bmp font 如何创建字体文件(图片字)
2018-02-24 12:59:04在游戏制作的过程中,总会有特殊的...有了十张图片后,就可以通过设置每张图片所对应的ASCII码,生成一个png 和fnt的描述文件,在程序中去通过解析fnt数据源去png中找到对应纹理信息,创建纹理,显示出图片来。 ... -
图片懒加载---动态创建的dom如何使用图片懒加载
2019-05-06 17:13:50图片懒加载现在已经算是一个被用烂了的技术了,但是对于刚接触的人,还是会遇到一些坑,本文记录一下此次项目...我的解决方法是:动态创建dom加在html这个单独写为一个方法createDom,触发图片懒加载是另外的方法laz... -
代码创建图片轮换; 代码创建控件时,如何将控件定义成属性
2015-05-08 22:04:01代码创建图片播放 #import "ViewController.h" #define kLength 15 @interface ViewController () @property(nonatomic, weak)UIImageView *myImage; @property(nonatomic, weak)UILabel *myLabel... -
如何创建一个UIImageView对象去显示图片
2015-11-25 20:06:46方法一:用imageName加载图片的时候,实质上系统会把图片缓存到内存中去,如果图片较大或者图片较多的情况下用这张方法会消耗很大的内存,而且对于图片的内存释放也是一件非常复杂的事情,而对于同一张图片,只会... -
解决idea中创建activiti项目后如何生成bng图片及如何找到连线
2017-08-08 15:03:06第一:创建好图标以后, 如何找连线呢? 大家只是看到只有这些: 这可怎么办呢? 怎么百度,谷歌都找不到,急的我都想放弃了。 然后又重新放到开头的那个图标上,想下该如何才能连线。 突然我看到光标的... -
如何通过代码创建圆角矩形和图片背景选择器
2015-11-20 21:58:54通过xml文件创建shape来实现圆角矩形以及在res/drawable目录下创建图片背景选择器的方式这里就不用介绍,这里主要介绍如何通过代码来生成shape图形,以及生成图片背景选择器. 效果图: 图片展示的是一个FlowLayout,... -
如何把图片移到文件夹中并自动创建文件夹?
2013-12-10 08:48:38一张图片用一个文件夹装,比如说有100张图片,就自动创建100个文件夹,每个文件夹装一张图片,这功能要怎么实现? -
如何在pb9中创建window窗口的标题前面加图片
2015-10-21 09:45:34如何在pb9中创建window窗口的标题前面加图片aaaaaaaaaaaaaaaaaaaaaaaaaaa -
GdkPixbuf如何用多个图片创建一个大图片
2009-09-17 19:57:00今天遇到一个问题,就是背景图片要使用一个圆角矩形,而GUI没有提供现成的,只是提供了圆角矩形的两边和中间填充的图片,需要自己来建立这个图片(这样建立背景图片可以更灵活,一个GUI可以用在多个应用中,我想这是... -
ASP.NET中用owc创建的图片如何去掉默认的黑色边框
2016-04-15 01:29:59我用OWC创建了图表,可是它默认的图表有黑色边框,该如何去掉? -
请问我如何在java里创建一个imageview用来显示图片
2018-05-02 14:53:26我想做一个画板,现在需要增加一个插入图片的功能。...目前我自定义了一个View来实现画线等功能,然后在MainActivity里创建了它,所以我不知道该怎么添加imageview来放置图片了,或者还有别的方法能实现? -
c#创建word时如何设置图片插入到指定文字后
2013-09-23 10:10:15我们学校要求做一个c#的小程序,用c#连接word,在指定标签处添加文字后,我想在文字中间添加一个图片,但不知道怎么加,希望各位高手帮帮忙。下面是程序,我能找到的就这些,运行结果不是想要的。 using ... -
vcenter vijava 如何创建主机
2016-11-02 03:03:40各位大神,现在我们项目利用vijava开发对接管理vcenter,请问利用vijava 创建主机时如何获取主机和vcenter server的证书验证,以及如何再添加主机时获取主机的信息。 参考vsphere clinet 截图 ![![图片说明]... -
Java中如何根据图片文件创建Image对象,且将Image对象保存为文件形式
2016-11-24 21:23:06创建与保存 1.根据一个文件路径创建Image对象 Image image = ImageIO.read(new File(filepath)); 2.将Image对象保存为文件形式 BufferedImage image = ImageIO.read(new File(filepath));//要想保存这个对象的话你... -
如何通过掩码图创建不规则的显示效果的图片(clip图片)
2012-08-29 17:46:21首先你必须要准备一个原图,和一个准备作为遮罩的掩码图(mask),这里有两点要注意,如果希望通过CGImageCreateWithMask函数去创建一个处理过的不规则的图片的话,那么你需要有一张原图是带alpha通道的图片,和一个... -
tensorflow基础之:图片地址和标签的CSV文件的创建
2019-05-25 16:15:15这篇文章主要介绍一下如何创建图片对应的类别的csv文件。 二、思路 首先在项目目录下创建一个名为IMAGE文件夹,将一些图片放入其中,图片名称最好有固定的命名规则(如图1)。之后通过代码获得图片路径,将所有... -
如何创建一个ContentHub exporter
2015-08-19 16:59:33在以前的例子“利用ContentHub API来import图片”及“使用ContentHub来导入我们需要的照片”中,我们已经讲述了如何从别的应用中提取一个图片到我们的应用中。我们也在我们的另外一个文章“如何通过ContentHub把内容... -
如何创建4位数字验证码图片(ASP.NET MVC2环境下)
2011-02-20 02:22:00基于mvc2架构下的验证码由一个controll中的action负责管理view上的一个动作,这是在controll中创建验证码图片的过程。 public FileResult ConfirmCode() { //生成4位随机数,并将其转为string型,传入session string... -
PHP 创建的图片对像如何直接转成base64字符串??
2017-02-15 03:36:20我用PHP imagecreatetruecolor生成了一个图片对像$im (当然还有一些详细的图片处理过程这里...那么请问,我如何直接将$im转成base64位的字符串,不需要直接显示图片(因为我要需要将这个base64字符串保存到数据库中)。 -
如何使用Outlook创建带有超链接的图片签名
2014-07-31 17:51:184.那么,应该如何实现单击logo之后即可跳转到指定页面呢?下面仅以微博举例说明: 1)单击选中图片后,点击右上方的超链接按钮 2)在弹出窗口的地址栏中写上自己微博的首页地址,一路确定即可... -
如何创建一个四维的矩阵,存储多个3通道彩色图片
2015-06-16 16:39:56分别对两张图像进行读入,可以把每张彩色图像存储为一个三维矩阵(width*...现在我想把这两张图片存入一个四维矩阵中(第四维是2),解决方法: I=imread('1.jpg'); J=imread('3.jpg'); %两幅图大小必须一样 K(:, -
ArcGIS 如何创建标记符号
2019-12-16 20:09:48ArcGIS(Version=10.1)创建标记符号有很多种,分别有 [x]3D 标记符号 [x]3D简单标记符号 [x]3D字符标记符号 [x]简单标记符号 [x]箭头标记符号 [x]图片标记符号 [x]字符标记符号 因为我要制作简单的字... -
更新后Android Studio如何创建shape
2019-01-19 22:30:45更新后Android Studio如何创建shape AS更新以后不能直接从drawable目录下创建根元素为shape等类型的xml文件,需要从上一级目录进行添加,下面以图片的形式展示。 就是这么简单。 ...
-
第一章 C语言 PTA 基本数据类型与表达式——作业-答案.html
-
嵌入式操作系统漫议:操作系统or裸跑?
-
apache-jmeter-2.9.7z
-
龙芯生态应用开发基础:C语言精要
-
TypeError: cleanWebpackPlugin is not a constructor 错误解决
-
jupyter的使用.txt
-
【布道者】Linux极速入门
-
工程制图 AutoCAD 2012 从二维到三维
-
【考研初试】安徽建筑大学911物理化学考研真题库资料
-
AIFramework框架Jittor特性(下)
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
scala-intellij-bin-2020.3.20.zip
-
PHP Spider爬虫
-
【ACWing】482. 合唱队形
-
日本三菱公司FX系列PLC通信调试工具(含源代码)
-
并发\分布式之顺序一致性和线性一致性
-
2020年Java面试208题 008-使用StringBuffer类但不使用reserve方法实现字符串反转
-
Amoeba 实现 MySQL 高可用、负载均衡和读写分离
-
CSDN调整图片大小
-
【考研初试】安徽建筑大学903流体力学考研真题库资料