欢迎来到皮皮网官网

【java个人博客程序源码】【双线bbi公式源码】【mybatis源码解读架构】安卓绘画源码在哪_安卓绘画源码在哪找

时间:2024-12-23 02:30:14 来源:c 游戏代源码

1.ai绘图软件哪个好用
2.1.4更新功能,安卓安卓2024最新Python源码及资源:通过百度API免费使用Stable-Diffusion-XL进行图像生成绘画!绘画绘画
3.谁能用JBuilder2006编一个绘画的小程序
4.腾讯T2I-adapter源码分析(3)-训练源码分析
5.自由开源的源码源码免费绘画软件:Krita
6.源码阅读忆丛(37)Minigui

安卓绘画源码在哪_安卓绘画源码在哪找

ai绘图软件哪个好用

       è§¦ç«™ã€DeepArt.io、Prisma等。

       1、触站是国内高人气画师作品分享平台,有海量插画师入驻,同时触站推出的AI绘画功能十分强大,零基础小白也能快速成才精美的作品,并且支持一键下载,数百万用户在上面分享、创作。

       2、DeepArt.io是一款非常强大的AI画画平台,可以将你上传的任何图片转化为任何一张艺术大师的创作风格。所以,想让自己的头像变成一幅梵高的油画作品的话,那么DeepArt.io就是不二选择。

       3、Prisma是一款十分有趣的AI画画平台,可以将照片转化成各种不同的艺术风格,包括柏林分立派、毕加索等等。而且,Prisma还配备了许多美妙的滤镜效果,所以用户可以轻松地让自己的照片更加出彩。

1.4更新功能,最新Python源码及资源:通过百度API免费使用Stable-Diffusion-XL进行图像生成绘画!安卓安卓

       百度绘画模型(Stable-Diffusion-XL)是绘画绘画一个基于文本提示生成图像的强大工具,融合了深度学习、源码源码java个人博客程序源码自然语言处理和图像处理技术,安卓安卓为用户提供创造与探索的绘画绘画平台。在此次更新中,源码源码我们新增了随机种子、安卓安卓提示词相关性和绘图风格设置功能,绘画绘画极大提升了绘图的源码源码灵活性与自由度。

       该模型通过接收用户输入的安卓安卓文本提示和反向提示,将其转化为视觉图像。绘画绘画界面设计简洁直观,源码源码提供API密钥输入、采样器选择、参数设置等功能,使用户能够轻松与模型互动,生成多样的图像。

       生成图像流程包括获取API访问令牌、构建请求、处理响应等步骤。用户输入的文本提示通过API传递至百度服务器,生成图像数据返回,双线bbi公式源码经过Base解码后保存为,并在界面上展示给用户。用户可通过前后切换按钮浏览多个生成图像。

       更新功能包括配置信息的保存与加载,用户设置存储于JSON文件,下次运行时自动加载,避免重复输入。最新资源大小为.MB,链接永久有效,详情请查阅文档。

       源代码基于Python,使用Tkinter和requests库构建用户界面,用户可输入API密钥、选择采样器、设置参数,并通过按钮触发图像生成过程。

       通过本次更新,百度绘画模型的使用体验得到了显著提升,我们希望读者能深入理解模型原理与应用,享受创造与探索的乐趣。感谢您的阅读,期待下次见面!

谁能用JBuilder编一个绘画的小程序

       import java.awt.*;

       import java.awt.event.*;

       import java.awt.geom.Point2D;

       import java.awt.image.BufferedImage;

       import javax.swing.*;

       import javax.swing.border.Border;

       public class DrawShapes extends JFrame{

       private static final long serialVersionUID = L;

       //作图面板

       private CVS cvs;

       //作图方式选择按钮

       private JToggleButton cycle,line,rect;

       private JLabel red,blue,green;

       private ButtonGroup bgroup;

       //按钮布局面板

       private JPanel menuPanel;

       //复位按钮

       private JButton clean;

       public DrawShapes(){

        super("DrawShape!");

       // this.setResizable(false);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setSize(,);

        this.setLocationRelativeTo(null);

        this.getContentPane().add(cvs=new CVS());

        this.initComponents();

       }

       //初始化组件

       private void initComponents() {

        this.menuPanel = new JPanel(null);

        this.menuPanel.setPreferredSize(new Dimension(,));

        this.menuPanel.setBorder(BorderFactory.createLineBorder(Color.gray));

        this.getContentPane().add(this.menuPanel,"South");

        this.bgroup = new ButtonGroup();

        this.cycle = new JToggleButton("圆形");

        this.cycle.setBounds(,4,,);

        this.line = new JToggleButton("直线");

        this.line.setBounds(,4,,);

        this.rect=new JToggleButton("矩形");

        this.rect.setBounds(,4,,);

        red = new JLabel();

        red.setOpaque(true);

        red.setBackground(Color.red);

        red.setBounds(,4,,);

        blue=new JLabel();

        blue.setOpaque(true);

        blue.setBackground(Color.blue);

        blue.setBounds(,4,,);

        green=new JLabel();

        green.setBackground(Color.green);

        green.setOpaque(true);

        green.setBounds(,4,,);

        this.menuPanel.add(red);

        this.menuPanel.add(blue);

        this.menuPanel.add(green);

        this.menuPanel.add(cycle);

        this.menuPanel.add(line);

        this.menuPanel.add(rect);

        this.bgroup.add(cycle);

        this.bgroup.add(line);

        this.bgroup.add(rect);

        this.clean = new JButton("清除");

        this.clean.setBounds(,4,,);

        this.menuPanel.add(clean);

        //按钮动作侦听器实例

        ActionListener al = new ActionListener(){

        public void actionPerformed(ActionEvent e) {

        Object src = e.getSource();

        if(src.equals(cycle))

        cvs.setSX(S.CYCLE);//画圆

        else if(src.equals(line))

        cvs.setSX(S.LINE);//画直线

        else if(src.equals(rect))

        cvs.setSX(S.RECTANGLE);//画矩形

        else if(src.equals(clean))

        cvs.reset();//复位

        }

        };

        //给按钮注册侦听器

        this.cycle.addActionListener(al);

        this.line.addActionListener(al);

        this.rect.addActionListener(al);

        this.clean.addActionListener(al);

        MouseListener ml = new MouseAdapter(){

        public void mousePressed(MouseEvent e){

        Object s = e.getSource();

        Border b = BorderFactory.createLoweredBevelBorder();

        if(s.equals(red)){

        cvs.setFC(Color.red);

        red.setBorder(b);

        blue.setBorder(null);

        green.setBorder(null);

        }

        else if(s.equals(blue)){

        cvs.setFC(Color.blue);

        blue.setBorder(b);

        red.setBorder(null);

        green.setBorder(null);

        }

        else if(s.equals(green)){

        cvs.setFC(Color.green);

        green.setBorder(b);

        blue.setBorder(null);

        red.setBorder(null);

        }

        }

        };

        blue.addMouseListener(ml);

        red.addMouseListener(ml);

        green.addMouseListener(ml);

       }

       //程序入口

       public static void main(String[] aregs) throws Exception{

        //调用系统视觉设置

        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

        SwingUtilities.invokeLater(new Runnable(){

        public void run(){

        new DrawShapes().setVisible(true);

        }

        });

       }

       }

       //主作图面板类,可接收一般鼠标事件和鼠标拖动事件

       class CVS extends Canvas implements MouseListener,MouseMotionListener{

       private static final long serialVersionUID = L;

       //指定图形的第一点,比如矩形的角点,圆形的圆心,直线的第一点

       private int x,y;

       //作图大小

       private int w,h;

       //作图类型控制

       private S sx = S.NULL;

       //双缓冲,背景缓冲区和临时缓冲区

       private BufferedImage background,buff;

       //图像更新标记

       private boolean hasChanged;

       //背景色,临时作图色,前景色

       private Color bgc = Color.white;

       private Color tmpc = Color.gray;

       private Color fgc = Color.blue;

       public CVS(){

        this.addMouseListener(this);

        this.addMouseMotionListener(this);

       }

       //作图控制方式设置

       public void setSX(S s){

        sx = s;

       }

       //控制作图颜色:

       public void setFC(Color c){

        fgc=c;

       }

       //绘制临时缓冲区

       private void drawing(int X,int Y) {

        Graphics g = buff.getGraphics();

        g.setColor(bgc);

        g.clearRect(0,0,w,h);

        copyBuffer();

        g.setColor(tmpc);

        switch(sx){

        case CYCLE:

        Point p = new Point(x,y);

        Point2D p2 = new Point2D.Double(X,Y);

        int dist = (int)p.distance(p2);

        g.drawOval(x,y,0,0);

        g.drawOval(x-dist, y-dist,dist*2,dist*2);

        break;

        case LINE:

        g.drawLine(x,y,X,Y);

        break;

        case RECTANGLE:

        int dx = x-X;

        dx = Math.abs(dx);

        int dy = y-Y;

        dy = Math.abs(dy);

        g.drawRect(x<X?x:X,y<Y?y:Y,dx,dy);

        break;

        }

        g.dispose();

        drawBufferToCVS();

       }

       //绘制背景缓冲区

       private void drawBuffer(int X,int Y){

        Graphics2D gd = background.createGraphics();

        gd.setColor(fgc);

        gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);

        switch(sx){

        case CYCLE:

        Point p = new Point(x,y);

        Point2D p2 = new Point2D.Double(X,Y);

        int dist = (int)p.distance(p2);

        gd.drawOval(x,y,0,0);

        gd.drawOval(x-dist, y-dist,dist*2,dist*2);

        break;

        case LINE:

        gd.drawLine(x,y,X,Y);

        break;

        case RECTANGLE:

        int dx = x-X;

        dx = Math.abs(dx);

        int dy = y-Y;

        dy = Math.abs(dy);

        gd.drawRect(x<X?x:X,y<Y?y:Y,dx,dy);

        break;

        default:

        popupMsg();

        }

        gd.dispose();

        Graphics g = this.getGraphics();

        g.clearRect(0,0,w,h);

        g.drawImage(background,0,0,null);

        g.dispose();

       }

       private void popupMsg(){

        JOptionPane.showMessageDialog(this,"请选择一种作图方式开始作图.");

       }

       //复制背景缓冲区内容到临时缓冲区

       private void copyBuffer(){

        Graphics g = buff.getGraphics();

        g.drawImage(background,0,0,null);

        g.dispose();

       }

       //印出临时缓冲区内容到窗口

       private void drawBufferToCVS() {

        Graphics g = this.getGraphics();

        g.drawImage(buff,0,0,null);

        g.dispose();

       }

       //清除双缓冲区并清除窗口内容

       public void reset(){

        clearContents(buff);

        clearContents(background);

        Graphics g = this.getGraphics();

        g.setColor(bgc);

        g.fillRect(0,0,w,h);

        g.dispose();

       }

       //清除指定缓冲区内容

       private void clearContents(BufferedImage i){

        Graphics g = i.getGraphics();

        g.setColor(bgc);

        g.fillRect(0,0,w,h);

        g.dispose();

       }

       //初始化缓冲区

       private void initImages() {

        background=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

        buff=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);

        clearContents(background);

        clearContents(buff);

       }

       //重写此方法,以便在窗口重新显示时能正确显示最后的内容.

       public void paint(Graphics g){

       // w = this.getWidth();

       // h = this.getHeight();

        if(background==null){

        w = this.getToolkit().getScreenSize().width;

        h = this.getToolkit().getScreenSize().height;

        initImages();

        }

        g.drawImage(background,0,0,null);

        g.dispose();

       }

       //双击作图区也能做清除动作,呵呵

       public void mouseClicked(MouseEvent e) {

        if(e.getClickCount()==2)

        reset();

       }

       public void mouseEntered(MouseEvent e) { }

       public void mouseExited(MouseEvent e) { }

       //每当按下鼠标时就重新设置第一点的坐标

       public void mousePressed(MouseEvent e) {

        this.x=e.getX();

        this.y=e.getY();

       }

       //每当释放鼠标时就决定是否需要将背景缓冲区印出到窗口

       public void mouseReleased(MouseEvent e) {

        if(hasChanged){

        hasChanged=false;

        drawBuffer(e.getX(),e.getY());

        }

       }

       //每当鼠标拖动时开始作图

       public void mouseDragged(MouseEvent e) {

        hasChanged=true;

        drawing(e.getX(),e.getY());

       }

       public void mouseMoved(MouseEvent e) { }

       }

       //作图类型的枚举

       enum S{

       CYCLE,RECTANGLE,LINE,NULL

       }

       ///:~ end

       çœ‹çœ‹è¿™ä¸ªæ»¡æ„ä¸

腾讯T2I-adapter源码分析(3)-训练源码分析

       随着stable-diffusion和midjourney等AI技术展现令人惊叹的艺术创作,人们对AI可控绘图的mybatis源码解读架构追求日益高涨。为提升AI图像生成的可控性,Controlnet和T2I-adapter等解决方案应运而生。系列文章将从T2I-adapter的源码出发,深入剖析其训练部分的实现原理。

       本篇我们将聚焦于训练源码的解析,通过代码结构的梳理,了解T2I-Adapter的训练流程。

       训练代码的运行涉及数据处理、模型加载、优化器设置以及实际训练过程。在第一部分,我们首先设置参数并加载数据,如DepthDataset,它从txt文件中读取、对应的深度图和文本描述。

       在模型加载阶段,我们区分了stable-diffusion模型和adapter。stable-diffusion模型加载时,其配置与推理阶段有所差异,如增加调度器参数、提高精度、调整分辨率和训练相关参数。adapter模型的加载则遵循推理过程中的初始化方法,通过构建不同模块来实现。主力源码指标详解

       训练过程中,adapter模型的关键结构包括下采样、卷积和ResnetBlock的使用,相比controlnet,T2I-adapter的参数更少,没有注意力层,这使得训练更为高效。模型放入GPU后,使用adamW优化器进行训练,同时设置学习率和数据保存路径。

       状态恢复部分,程序会判断是否从头开始或恢复训练,设置log信息。接下来,代码进入实际的训练循环,包括条件编码、隐藏状态生成、adapter结果附加至sd模型以及adapter梯度计算。

       loss函数定义在模型配置中,采用L2损失来衡量生成图像与给定时间点加噪ground truth的接近程度。训练过程中,loss计算和模型保存都在代码中明确体现。

       总的来说,T2I-adapter的深度研究论文源码训练源码展示了精细的结构和参数设置,确保了AI绘画的可控性和性能。在AI艺术的探索中,每一行代码都承载着技术进步的点滴痕迹。

自由开源的免费绘画软件:Krita

       寻找一款能够替代Photoshop和SAI的免费绘画软件?Krita可能就是你的理想选择。这款开源软件不仅免费,且支持Windows、macOS和Linux,甚至安卓平板也在测试中。它功能强大,涵盖了绘画的全流程,包括草图、插画、漫画、动画和3D贴图,具备数位板支持、防抖、图层管理等专业特性,还内置了官方中文版,确保了全球用户的使用体验。

       虽然许多人首先会想到业界巨头的付费软件,但Krita的出现打破了常规。Krita并非仅仅追求免费,而是一个遵循自由软件原则的项目,其使用GNU GPL许可证,这意味着用户可以自由地使用、研究和修改源代码,而且社区的开源特性使得它不断进步和改进。尽管它起初可能不如商业软件那样成熟,但随着时间和社区的共同开发,Krita在近年来已经发展成为能够媲美商业化软件的工具。

       Krita的界面设计直观,操作方便,尤其适合数字绘画。虽然在早期版本中可能面临一些性能问题,但随着时间的推移,开发者和志愿者们不断优化,现在的Krita已经能满足专业创作的需求。它支持显卡加速、多传感器控制,以及丰富的图层功能,包括色彩管理和HDR支持,甚至可以配合Blender进行纹理制作。

       对于那些担心语言问题的用户,Krita的中文翻译工作做得非常到位,从官方网站到软件界面,都有了完整的中文支持。Krita的中文社区虽然相对较弱,但已有中文爱好者在积极贡献,使得更多中国用户能够无缝融入这个国际化的创作平台。

       总的来说,Krita以其强大的功能、开放的源代码和友好的社区,为数字艺术家提供了一个免费、可信的创作环境。尽管它可能需要一些适应和学习,但对于追求创新和自由的艺术家来说,Krita无疑是值得尝试的优秀选择。如果你正在寻找一个替代品,不妨考虑一下这款来自全球开发者和艺术家共同维护的软件。

源码阅读忆丛()Minigui

       探索GUI的历史与实现

       对于GUI的细节仍然存在一些困惑,似乎总是有新的东西需要学习。年轻时,对《Windows程序设计》、MFC等书籍充满热情,那些API的神奇之处让人着迷。然而,花费大量时间深入学习,却似乎事倍功半,微软似乎更倾向于教人如何使用,而非深入解释实现原理。尽管如此,还是尝试实现过文字版的GUI,涉及基本的按钮、滚动条、菜单等元素。但一些细节仍不清楚。

       通过网络搜索,了解到魏永明的Minigui项目是对Windows GUI和GDI的模仿。通过下载vc6版本的MinGUI,能够进行调试。在分析代码时,发现事件回调、消息链等常见功能并无特别之处。而DefaultMainWinProc、InvalidateRect、PopupMenuTrackProc等函数则更具实际意义。GUI就像是在显存沙漠中绘画,有其既定规则。DefaultMainWinProc负责实现画最大、最小按钮、窗口方框等常规操作,而绘制的动作有其先后顺序,即消息的先后处理。

       GDI部分则展示了如何在显存中书写文字,包括粗体、斜体等效果;如何绘制图标和位图;关键的rgn裁剪矩形技术,用于加速绘制,矩形外的绘制不会进行。rgn裁剪矩形的运算包括加、减、合、并等,对应着窗口的各种移动和形状改变。不同线程之间的窗口管理由HWND_DESKTOP统一处理,desktop-common.c相当于窗口管理器,不同程序无法直接获取其他窗口的位置和大小,由其进行统一管理。desktop包含三个线程,分别负责捕捉键盘、鼠标消息,以及实际消息的处理,以及窗口给desktop的消息交由DesktopWinProc统一处理。

       MinGUI的模拟版本在调试方面虽能使用,但功能实现上有缺失。相比之下,libminigui-1.0.提供了完整的gui、gdi、kernel代码,定义了大部分的画窗套路和动作,只需要关注关键部分和自己定义的动作即可。

       Linux的GUI采用了xwindows,通过socket将xclient进程中的窗口绘制信息传输到xserver,由xserver统一处理。xclient之间互相不知道窗口的位置和大小,因此都通过xserver进行绘制,xserver还包含了窗口管理器。而MinGUI在一个进程的多个线程中实现,不存在窗口管理器与进程间位置信息传递的问题。

       Windows使用wink.sys作为窗口管理器,作为内核态程序,用户态的动态链接库在不同进程间数据段不同,但内核态的数据段统一,因此实现了窗口管理。Windows显示流畅的原因之一在于窗口管理机制与MinGUI的desktop类似,但实现机制有所不同。

       工作繁忙,业余时间进行学习。尽管以前对GUI有过大量无用功,但这次的探索仅用几天时间便有所收获。

copyright © 2016 powered by 皮皮网   sitemap