首先 有一点需要先提出来,PGraphics是继承自PImage的,看源码: public class PGraphics extends PImage implements PConstants { ... } 因此,理论上所有的绘制函数其实它的绘制对象都是PImage,都在这张图纸上呈现内容,即默认的PGraphics g,可参考笔者另一篇: https://www.cnblogs.com/sharpeye /p/13734132.html 这就给我们一个参考,意思是PGraphics和PImage时常要考虑两者互相转换的问题。 make save() work return image; } 值得思考的是: 一、 PImage对象改变其像素无外乎要修改其pixels数组值,而不能再图片上直接绘制图形,如果要绘制则必须转换成PGraphics )img2.clone(); 使用clone方法 注意转换类型 } catch(Exception e) { } op2 = img2.copy(): 使用copy方法 三、 绘制在PGraphics
, 0, 0); } // 欢迎关注 小菜与老鸟 (公众号、视频号、Bilibili号) class Taichi { PVector location; float radius; PGraphics pg; float angle = 0; Taichi(PVector location, float radius, PGraphics pg) { this.location = void settings() { size(viewport_w, viewport_h, P2D); } 3)我们声明流体对象以及流体层 DwFluid2D fluid; // 流体 PGraphics2D 1)声明一个障碍物层 PGraphics2D pg_obstacles; // 障碍物 2)定义障碍物层 void setupFluid() { ··· // 障碍物层 pg_obstacles = (PGraphics2D)createGraphics(viewport_w, viewport_h, P2D); pg_obstacles.smooth(4); } 3)绘制障碍物 void
,img.GetHeight()); Graphics graphics1(GetDlgItem(IDC_GDIPLUS)->GetDC()->m_hDC); //目标绘图 Graphics* pgraphics2 = Graphics::FromImage(&bmp); //内存绘图 pgraphics2->Clear(Color(255,255,255,255)); //画上底色背景 pgraphics2->DrawImage(&img,X,Y,img.GetWidth(),img.GetHeight()); //画图片 graphics1.DrawImage(&bmp,0,0
功能划分 头像和封面图合成显示 第一部分头像和封面图合成预览区域,这块使用PGraphics来解决,可以将之看成一个单独的图层,方便我们只将合成头像部分导出保存。 // 头像图层,包含头像和头像的框图封面 PGraphics avatarLayer; void draw() { background(200); // 头像图层的绘制部分 avatarLayer.beginDraw
按照官网的例子,我们有下面5种常见的输出方式: 无窗口式输出 窗口式输出 窗口式动画单帧输出 窗口式3D图形输出 PGraphics式输出 1)无窗口式输出 此示例将单个帧绘制到 SVG 文件并退出。 endRaw(); record = false; } } void keyPressed() { if (key == 'r') { record = true; } } 5)PGraphics 式输出 我们也可以使用createGraphics()函数输出编写 SVG 文件,需要注意的是必须在PGraphics SVG 对象上调用dispose()。 import processing.svg.*; PGraphics svg = createGraphics(300, 300, SVG, "output.svg"); svg.beginDraw(