Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于FPGA的VGA/LCD显示控制器系统设计(下)

基于FPGA的VGA/LCD显示控制器系统设计(下)

原创
作者头像
FPGA技术江湖
修改于 2021-05-21 10:18:40
修改于 2021-05-21 10:18:40
81800
代码可运行
举报
文章被收录于专栏:FPGA技术江湖FPGA技术江湖
运行总次数:0
代码可运行

基于FPGA的VGA/LCD显示控制器系统设计(下)

今天给大侠带来基于FPGA的VGA/LCD显示控制器设计,由于篇幅较长,分三篇。今天带来第三篇,下篇,程序的仿真与测试以及总结,话不多说,上货。

之前也有图像处理以及VGA显示相关的文章,各位大侠可以自行搜索。

源码系列:基于FPGA的VGA驱动设计(附源工程)

基于FPGA的实时图像边缘检测系统设计(上)

基于FPGA的实时图像边缘检测系统设计(中)

基于FPGA的实时图像边缘检测系统设计(下)

导读

VGA (Video Graphics Array) 即视频图形阵列,是IBM于1987年随PS/2机(PersonalSystem 2)一起推出的使用模拟信号的一种视频传输标准。这个标准对于现今的个人电脑市场已经十分过时。但在当时具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域取得了广泛的应用,是众多制造商所共同支持的一个低标准。

LCD ( Liquid Crystal Display 的简称)液晶显示器。LCD 的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的。按照背光源的不同,LCD可以分为CCFL显示器和LED显示器两种。LCD已经替代CRT成为主流,价格也已经下降了很多,并已充分普及。

在之前的文章中介绍了如何获取、处理摄像头提供的视频信号,在实际应用中还需要将经过处理的信号显示在显示器上。这个过程与信号处理中的过程上是相反的,将数字信号按照电视信号的制式组成合乎时序、格式要求的信号,并加入用于控制的各种同步信号。本篇将通过 FPGA实现一个 VGA/LCD 显示控制器的实例,并详细介绍实现过程。

第三篇内容摘要:本篇会介绍程序的仿真与测试以及总结等相关内容。

四、程序的仿真与测试

为了检验程序是否实现预先设定的功能,需要编写仿真程序。仿真程序的主要代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module test;
    //寄存器
    reg clk;
    reg rst;
    //参数
    parameter LINE_FIFO_AWIDTH = 7;
    //wire 申明
    wire int;
    wire [31:0] wb_addr_o;
    wire [31:0] wb_data_i;
    wire [31:0] wb_data_o;
    wire [3:0] wb_sel_o;
    wire wb_we_o;
    wire wb_stb_o;
    wire wb_cyc_o;
    wire [2:0] wb_cti_o;
    wire [1:0] wb_bte_o;
    wire wb_ack_i;
    wire wb_err_i;
    wire [31:0] wb_addr_i;
    wire [31:0] wbm_data_i;
    wire [3:0] wb_sel_i;
    wire wb_we_i;
    wire wb_stb_i;
    wire wb_cyc_i;
    wire wb_ack_o;
    wire wb_rty_o;
    wire wb_err_o;
    reg pclk_i;
    wire pclk;
    wire hsync;
    wire vsync;
    wire csync;
    wire blanc;
    wire [7:0] red;
    wire [7:0] green;
    wire [7:0] blue;
    wire dvi_pclk_p_o;
    wire dvi_pclk_m_o;
    wire dvi_hsync_o;
    wire dvi_vsync_o;
    wire dvi_de_o;
    wire [11:0] dvi_d_o;
    wire vga_stb_i;
    wire clut_stb_i;
    reg scen;
    
    // 测试程序变量
    integer wd_cnt;
    integer error_cnt;
    
    reg [31:0] data;
    reg [31:0] pattern;
    reg int_warn;
    
    integer n;
    integer mode;
    
    reg [7:0] thsync, thgdel;
    reg [15:0] thgate, thlen;
    reg [7:0] tvsync, tvgdel;
    reg [15:0] tvgate, tvlen;
    reg hpol;
    reg vpol;
    reg cpol;
    reg bpol;
    integer p, l;
    reg [31:0] pn;
    reg [31:0] pra, paa, tmp;
    reg [23:0] pd;
    reg [1:0] cd;
    reg pc;
    reg [31:0] vbase;
    reg [31:0] cbase;
    reg [31:0] vbara;
    reg [31:0] vbarb;
    reg [7:0] bank;
    
    // 常量定义
    `define CTRL 32'h0000_0000
    `define STAT 32'h0000_0004
    `define HTIM 32'h0000_0008
    `define VTIM 32'h0000_000c
    `define HVLEN 32'h0000_0010
    `define VBARA 32'h0000_0014
    `define VBARB 32'h0000_0018
    `define USE_VC 1
    parameter PCLK_C = 20;
    
    //测试内容
    initial
        begin
            $timeformat (-9, 1, " ns", 12);
            $display("\n\n");
            $display("******************************************************");
            $display("*VGA/LCD Controller Simulation started ... *");
            $display("******************************************************");
            $display("\n");
            
    `ifdef WAVES
        $shm_open("waves");
        $shm_probe("AS",test,"AS");
        $display("INFO: Signal dump enabled ...\n\n");
  
    `endif
        scen = 0;
        error_cnt = 0;
        clk = 0;
        pclk_i = 0;
        rst = 0;
        int_warn=1;
        repeat(20) @(posedge clk);
        rst = 1;
        repeat(20) @(posedge clk);
        
    if(0)
        begin
        
        end
    else
    if(1)
        begin
        
    `ifdef VGA_12BIT_DVI
        dvi_pd_test;
    `endif
    
        end
    else
        begin
        
        // 测试区域
    $display("\n\n");
    $display("*****************************************************");
    $display("*** XXX Test ***");
    $display("*****************************************************\n");
    
        s0.fill_mem(1);
        repeat(10) @(posedge clk);
        //参数设置
        vbara = 32'h0000_0000;
        vbarb = 32'h0001_0000;
        m0.wb_wr1( `VBARA, 4'hf, vbara );
        m0.wb_wr1( `VBARB, 4'hf, vbarb );
        thsync = 0;
        thgdel = 0;
        thgate = 340;
        thlen = 345;
        tvsync = 0;
        tvgdel = 0;
        tvgate = 240;
        tvlen = 245;
        
        /*
        thsync = 0;
        thgdel = 0;
        thgate = 63;
        thlen = 70;
        tvsync = 0;
        tvgdel = 0;
        tvgate = 32;
        tvlen = 36;
        */
        
        hpol = 0;
        vpol = 0;
        cpol = 0;
        bpol = 0;
        m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
        m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
        m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );

    mode = 2;

    for(bank=0;bank<3;bank=bank + 1)
        begin
            case(mode)
            0:
            begin
                cd = 2'h2;
                pc = 1'b0;
            end
            
            1:
            begin
                cd = 2'h0;
                pc = 1'b0;
            end
            
            2:
            begin
                cd = 2'h0;
                pc = 1'b1;
            end
            
            3:
            begin
                cd = 2'h1;
                pc = 1'b0;
            end
            
        endcase
    
    m0.wb_wr1( `CTRL, 4'hf, {
        16'h0, // Reserved
        bpol, cpol,
        vpol, hpol,
        pc, // 1'b0, // PC
        cd, // 2'h2, // CD
        2'h0, // VBL
        1'b0, // Reserved
        1'b1, // CBSWE
        1'b1, // VBSWE
        1'b0, // BSIE
        1'b0, // HIE
        1'b0, // VIE
        1'b1 // Video Enable
      });
      
    $display("Mode: %0d Screen: %0d", mode, bank);
    //repeat(2) @(posedge vsync);
    @(posedge vsync);
    
    // 每一行数据
    for(l=0;l<tvgate+1;l=l+1)
    // For each Pixel
    for(p=0;p<thgate+1;p=p+1)
        begin
            while(blanc) @(posedge pclk);
            
            if(bank[0]) vbase = vbarb[31:2];
            else vbase = vbara[31:2];
            if(bank[0]) cbase = 32'h0000_0c00;
            else cbase = 32'h0000_0800;
            
            // 各种显示模式
            //像素数目 = 行数* (thgate + 1) + p
            pn = l * (thgate + 1) + p;
            
            case(mode)
                0: // 24 位模式
                begin
                    pra = pn[31:2] * 3;
                    paa = pra + vbase; // 像素决定地址
                
                // 像素数据
                case(pn[1:0])
                    0:
                    begin
                        tmp = s0.mem[paa];
                        pd = tmp[31:8];
                    end
                    1:
                        begin
                            tmp = s0.mem[paa];
                            pd[23:16] = tmp[7:0];
                            tmp = s0.mem[paa+1];
                            pd[15:0] = tmp[31:16];
                        end
                    2:
                        begin
                            tmp = s0.mem[paa+1];
                            pd[23:8] = tmp[15:0];
                            tmp = s0.mem[paa+2];
                            pd[7:0] = tmp[31:24];
                        end
                    3:
                    begin
                        tmp = s0.mem[paa+2];
                        pd = tmp[23:0];
                    end
                endcase
            end
            
            1: // 8 位灰度模式
                begin
                    pra = pn[31:2]; // 像素相对地址
                    paa = pra + vbase; // 像素绝对地址
                    case(pn[1:0])
                        0:
                            begin
                                tmp = s0.mem[paa];
                                pd = { tmp[31:24], tmp[31:24], tmp[31:24] };
                            end
                        1:
                            begin
                                tmp = s0.mem[paa];
                                pd = { tmp[23:16], tmp[23:16], tmp[23:16] };
                            end
                        2:
                            begin
                                tmp = s0.mem[paa];
                                pd = { tmp[15:8], tmp[15:8], tmp[15:8] };
                            end
                        3:
                            begin
                                tmp = s0.mem[paa];
                                pd = { tmp[7:0], tmp[7:0], tmp[7:0] };
                            end
                    endcase
                end
            2: // 8 位伪彩色模式
                begin
                    pra = pn[31:2]; //像素相对地址
                    paa = pra + vbase; //像素绝对地址
                    case(pn[1:0])
                        0:
                            begin
                                tmp = s0.mem[paa];
                                tmp = s0.mem[cbase[31:2] + tmp[31:24]];
                                pd = tmp[23:0];
                            end
                        1:
                            begin
                                tmp = s0.mem[paa];
                                tmp = s0.mem[cbase[31:2] + tmp[23:16]];
                                pd = tmp[23:0];
                            end
                        2:
                            begin
                                tmp = s0.mem[paa];
                                tmp = s0.mem[cbase[31:2] + tmp[15:8]];
                                pd = tmp[23:0];
                            end
                        3:
                            begin
                                tmp = s0.mem[paa];
                                tmp = s0.mem[cbase[31:2] + tmp[7:0]];
                                pd = tmp[23:0];
                            end
                    endcase
                end
                
          3: // 16 位模式
              begin
                  pra = pn[31:1]; //像素相对地址
                  paa = pra + vbase; //像素绝对地址
                  case(pn[0])
                      0:
                          begin
                              tmp = s0.mem[paa];
                              tmp[15:0] = tmp[31:16];
                              pd = {tmp[15:11], 3'h0, tmp[10:5], 2'h0, tmp[4:0], 3'h0};
                          end
                      1:
                          begin
                              tmp = s0.mem[paa];
                              pd = {tmp[15:11], 3'h0, tmp[10:5], 2'h0, tmp[4:0], 3'h0};
                          end
                  endcase
              end
      endcase
      
      if(pd !== {red, green, blue} )
          begin
              $display("ERROR: Pixel Data Mismatch: Expected: %h, Got: %h %h %h",
              pd, red, green, blue);
              $display(" pixel=%0d, line=%0d, (%0t)",p,l,$time);
              error_cnt = error_cnt + 1;
          end
          
          @(posedge pclk);
      end
  end   
  
  show_errors;
  $display("*****************************************************");
  $display("*** Test DONE ... ***");
  $display("*****************************************************\n\n"); 
  end  
      repeat(10) @(posedge clk);
      $finish;
  end
  
  //同步监视
    `ifdef VGA_12BIT_DVI
    sync_check #(PCLK_C*2) ucheck(
    `else
    sync_check #(PCLK_C) ucheck(
    `endif
        .pclk( pclk ),
        .rst( rst ),
        .enable( scen ),
        .hsync( hsync ),
        .vsync( vsync ),
        .csync( csync ),
        .blanc( blanc ),
        .hpol( hpol ),
        .vpol( vpol ),
        .cpol( cpol ),
        .bpol( bpol ),
        .thsync( thsync ),
        .thgdel( thgdel ),
        .thgate( thgate ),
        .thlen( thlen ),
        .tvsync( tvsync ),
        .tvgdel( tvgdel ),
        .tvgate( tvgate ),
        .tvlen( tvlen ) );
        
    // 视频数据监视
    wb_b3_check u_wb_check (
        .clk_i ( clk ),
        .cyc_i ( wb_cyc_o ),
        .stb_i ( wb_stb_o ),
        .cti_i ( wb_cti_o ),
        .bte_i ( wb_bte_o ),
        .we_i ( wb_we_o ),
        .ack_i ( wb_ack_i ),
        .err_i ( wb_err_i ),
        .rty_i ( 1'b0 ) );

    //看门狗计数器
    always @(posedge clk)
        if(wb_cyc_i | wb_cyc_o | wb_ack_i | wb_ack_o | hsync)
            wd_cnt <= #1 0;
        else
            wd_cnt <= #1 wd_cnt + 1;
            
    always @(wd_cnt)
        if(wd_cnt>9000)
            begin
                $display("\n\n*************************************\n");
                $display("ERROR: Watch Dog Counter Expired\n");
                $display("*************************************\n\n\n");
                $finish;
            end
            
    always @(posedge int)
        if(int_warn)
            begin
                $display("\n\n*************************************\n");
                $display("WARNING: Recieved Interrupt (%0t)", $time);
                $display("*************************************\n\n\n");
            end
    
    always #2.5 clk = ~clk;
    always #(PCLK_C/2) pclk_i = ~pclk_i;
    
    //模块原型
    vga_enh_top #(1'b0, LINE_FIFO_AWIDTH) u0 (
        .wb_clk_i ( clk ),
        .wb_rst_i ( 1'b0 ),
        .rst_i ( rst ),
        .wb_inta_o ( int ),
        //从信号
        .wbs_adr_i ( wb_addr_i[11:0] ),
        .wbs_dat_i ( wb_data_i ),
        .wbs_dat_o ( wb_data_o ),
        .wbs_sel_i ( wb_sel_i ),
        .wbs_we_i ( wb_we_i ),
        .wbs_stb_i ( wb_stb_i ),
        .wbs_cyc_i ( wb_cyc_i ),
        .wbs_ack_o ( wb_ack_o ),
        .wbs_rty_o ( wb_rty_o ),
        .wbs_err_o ( wb_err_o ),
        //主信号
        .wbm_adr_o ( wb_addr_o[31:0] ),
        .wbm_dat_i ( wbm_data_i ),
        .wbm_sel_o ( wb_sel_o ),
        .wbm_we_o ( wb_we_o ),
        .wbm_stb_o ( wb_stb_o ),
        .wbm_cyc_o ( wb_cyc_o ),
        .wbm_cti_o ( wb_cti_o ),
        .wbm_bte_o ( wb_bte_o ),
        .wbm_ack_i ( wb_ack_i ),
        .wbm_err_i ( wb_err_i ),
        //VGA 信号
        .clk_p_i ( pclk_i ),
    `ifdef VGA_12BIT_DVI
        .dvi_pclk_p_o ( dvi_pclk_p_o ),
        .dvi_pclk_m_o ( dvi_pclk_m_o ),
        .dvi_hsync_o ( dvi_hsync_o ),
        .dvi_vsync_o ( dvi_vsync_o ),
        .dvi_de_o ( dvi_de_o ),
        .dvi_d_o ( dvi_d_o ),
    `endif
        .clk_p_o ( pclk ),
        .hsync_pad_o ( hsync ),
        .vsync_pad_o ( vsync ),
        .csync_pad_o ( csync ),
        .blank_pad_o ( blanc ),
        .r_pad_o ( red ),
        .g_pad_o ( green ),
        .b_pad_o ( blue )
    );
    
    wb_mast m0( .clk( clk ),
            .rst( rst ),
            .adr( wb_addr_i ),
            .din( wb_data_o ),
            .dout( wb_data_i ),
            .cyc( wb_cyc_i ),
            .stb( wb_stb_i ),
            .sel( wb_sel_i ),
            .we( wb_we_i ),
            .ack( wb_ack_o ),
            .err( wb_err_o ),
            .rty( 1'b0 )
        );
    
    wb_slv #(24) s0(.clk( clk ),
            .rst( rst ),
            .adr( {1'b0, wb_addr_o[30:0]} ),
            .din( 32'h0 ),
            .dout( wbm_data_i ),
            .cyc( wb_cyc_o ),
            .stb( wb_stb_o ),
            .sel( wb_sel_o ),
            .we( wb_we_o ),
            .ack( wb_ack_i ),
            .err( wb_err_i ),
            .rty( )
        );
    
    `include "tests.v"
    
endmodule

五、总结

本篇介绍了一个 VGA/LCD 显示控制器的实例。首先介绍了 VGA/LCD 显示的相关知识,然后介绍了程序的主要结构和主要功能模块的实现过程。最后用一个测试程序验证程序的功能是否满足要求。本章为各位大侠设计自己的 VGA/LCD 显示控制器提供了一个可以使用的方案。

本篇到此结束,各位大侠,有缘再见!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Visual Studio 2008 每日提示(四)
#031、 把编辑器的背景变成黑色 原文地址:http://blogs.msdn.com/saraford/archive/2007/09/06/did-you-know-how-to-change-the-editor-background-to-black.aspx 操作步骤: 菜单:工具+选项+环境+字体和颜色,在”显示项“选项中选择”纯文本“,你可以修改”项前景色“来为白色,修改”项背景色“来为黑色 评论:虽然背景是黑色比较酷,不过我不习惯,感觉比白色背景还费眼睛 #032、 用Ctrl+Sh
Jianbo
2018/03/01
1.2K0
[桌面版] 在 Mockplus 2.1 (预览版)中使用切换面板
1、添加切换面板 2、双击编辑切换面板当前页。 3、退出当前页编辑,点击组件上工具条上的加号,增加一个内容页并编辑内容 4、添加响应用户事件的组件。拖拽设置交互目标为切换面板。这里可以选择当前事件源组件可以切换到切换面板的哪一页。 5、可以设置切换面板在预览时的切换方式。 6、预览。可以查看到切换效果了 你知道了么?一般人我不告诉他!
奔跑的小鹿
2018/03/15
7990
[桌面版] 在 Mockplus 2.1 (预览版)中使用切换面板
PS基础操作及常用快捷键
文章目录 1. PS界面 2. PS基础操作 3. 图层 4. 填充颜色 5. 选框工具 6. 自由变化 ctrl+T 7. 常用快捷键 1. PS界面 窗口菜单:管理(显示/隐藏)工具栏、属性栏、面
兮动人
2021/06/11
2.1K0
PS基础操作及常用快捷键
Python中tkinter模块的常用参数总结
对于按钮组件、菜单组件等可以在创建组件时通过command参数指定其事件处理函数。方法为bind;或者用bind_class方法进行类绑定,bind_all方法将所有组件事件绑定到事件响应函数上。
Python学习者
2023/06/14
1.8K0
[桌面版] 在 Mockplus 2.1 (预览版)中使用母版
Mockplus 2.1 预览版新增母版功能,可以直接复用组件,减少重复设计。 首先可以看一个母版的使用演示: 下面详细介绍一下母版的相关操作: 1. 添加母版 在工作区中的任意组件上面点击右
奔跑的小鹿
2018/03/15
8710
[桌面版] 在 Mockplus 2.1 (预览版)中使用母版
Photoshop 2023 资源免费下载(mac+windows全版本都有,包括最新的2023)
审美时代如果你不会ps是不是说不过去了。现在朋友圈的照骗基本都被ps的照骗充斥着。所以赶紧来一起学习Photoshop这一项技能吧!首先你要安装一个ps
用户7442032
2022/12/20
4.8K0
ubuntu快捷键设置大全 [转]
转自:http://xiongyongyuan1234.blog.163.com/blog/static/5566116820103845725657/
forrestlin
2022/04/02
2.3K0
3-Ps基础(工具栏)
当文件有多个图层的时候,可以在选择移动工具的情况下,选择自动选择,软件会自动找到相应的图或者组。
孙寅
2020/06/02
1.5K0
[桌面版] 在 Mockplus 2.1 (预览版)中使用图片轮播
1、创建移动项目 2、从交互分类中添加一个图片轮播组件 3、点击图片轮播组件上小工具条上的图片选择按钮 4、选择一张或多张图片。(这里只会把对话框中勾选中的图片加载到图片轮播组件中,可以点击每张图片上的删除按钮,删除不需要的图片,也可以按Del键,删除当前点击的那张图片,还可以调整图片的顺序)。图片选择完成后,还可以点击组件上的删除图标,删除当前可见的那张图片。 5、通过属性面板设置预览时指示器的形状,颜色,位置等;可以设置预览时图片的切换动画 6、预览。在预览状态下,可以点击左右的箭头
奔跑的小鹿
2018/03/15
1.1K0
[桌面版] 在 Mockplus 2.1 (预览版)中使用图片轮播
ps切图必知必会
对于前端切图,相信很多小伙伴都不会陌生,但是对于新手,有时却很棘手,想着我本是来写代码的,你给我一张图干嘛的, 有时,或许你总奢望着UI设计师,把所有的图都给你切好,你只管撸码的,然而事实并非如此,有时候呢,设计师给我们的图,也并非是一成不变,往往也需要作一些调整,更改,完美的将UI设计图,进行还原实现产品经理的意图,是前端小伙伴职责所在,那么熟练简单的ps操作,就很重要了,虽然我们不是设计者,但是我们是具体的实现者,实现从0到1的过程,至于前端ps操作,绝大多数工作是简单的切图(抠图),测量,图片简单的处理,将图片利用web技术进行填充布局实现静态页面展现就可以了,至于,ps软件,我也只是停留在简单的使用,有时候,在一些群里,看到一些小伙伴,对于切图,有些畏惧,打开ps软件,无从下手,有时候呢,即使自己曾今,ps技术玩的很溜,但是只要一段时间没有去接触,就会很陌生,一些习以为常的技巧,忘得一干二净,非常苦恼,您将在本篇学会一些常用的奇淫绝技,完全可以胜任ps切图工作,今天,就我的学习和使用,跟大家分享一下自己的学习心得,如果你已经是老司机了,可以直接忽略,欢迎路过的老师,多提意见和指正
itclanCoder
2020/10/28
3.4K0
ps切图必知必会
MacBook苹果电脑如何安装Adobe PS、AU、PR等软件?
Adobe作为全球领先的多媒体设计软件供应商,出品了一系列图形设计、影像编辑与网络开发的Adobe软件产品套装,涵盖平面,插画,音视频,动画等创意类相关应用。从事多媒体设计相关的工作者基本都会用Adobe全系列软件。adobe系列软件有哪些?
office小助手
2022/05/14
9.1K2
MacBook苹果电脑如何安装Adobe PS、AU、PR等软件?
关于前端的photoshop初探的学习笔记
写在前边 这还是高三的时候暑假的时候学习这个软件时记的笔记呢,今天又在电脑上找到了它,总觉得不应该让他尘封在我的硬盘上,于是挂了出来。 温馨提示:比较乱,写给自己看的,看不下去,按ctrl+W 笔记内容 ps简介 可以用于合成。 可以三维 adobe bridge图像浏览器 可以直接将图片拖动到ps的编辑系统中。。但是是出于临时文件状态,还需要对他进行保存。。 网站上某些图片不能够拉动,但是可以利用截图功能来实现。。 两张图片同时拉倒一个文件中构成两个不同的图层。。打开文件的几种方法。。 ps数
Angel_Kitty
2018/04/09
2.6K0
50个Axure画原型技巧,产品经理速学速用
Mac 使用快捷键 「Cmd + ,」,Win 使用「F9」,调出「偏好配置」弹窗。
用户2697670
2024/09/19
5920
1小时学会不打代码制作一个网页精美简历(1)
作者名:1_bit 简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。
1_bit
2022/01/06
7270
1小时学会不打代码制作一个网页精美简历(1)
目录内文件名导出到Excel文件
1、打印文件夹列表时可以包含其他列。 2、打印文件列表时,可以包含标准文件信息,如文件名,扩展名,类型,所有者和属性以及可执行文件信息(EXE,DLL,OCX),如文件版本,描述,公司等。 3、此外,还可列出音轨,标题,艺术家,专辑,流派,视频格式,每像素位数,每秒帧数,音频格式,每通道位数等多媒体属性(MP3,AVI,WAV,JPG,GIF,BMP)。 4、您可以打印的另一组列是 Microsoft Office 文件(DOC,XLS,PPT),因此您可以查看文档标题,作者,关键字等,而无需逐一打开这些文件。 5、对于每个文件和文件夹,还可以获取其CRC32,MD5,SHA-1和Whirlpool哈希码,以便您可以验证该文件未被修改。 6、打印文件夹中的文件进一步自定义。 7、大量的选项允许您完全自定义输出的外观。您可以设置文件和文件夹的排序方式,以便随时显示它们。您可以定义列顺序,以便最重要的列立即可见。国际显示格式选项允许您根据当地需要调整输出。列表可以包含指向实际文件和目录的链接,这样您就可以将列表放在具有可点击内容的网页上。 8、HTML显示样式完全自定义 – 您可以更改背景颜色,标题,目录行,奇数和偶数文件行以及周围框架的单独样式。 9、您可以通过对文件名,日期,大小或属性应用过滤器来限制文件列表。 10、目录Lister Pro也可以集成到Windows资源管理器的上下文菜单中,因此您甚至不需要打开应用程序即可生成列表。 11、命令行界面支持可以从 Windows任 务计划程序运行的自动化列表。 12、检查文件夹大小或查找大文件夹 13、使用 Directory Lister Pro,您还可以找出给定的目录大小,按文件夹大小进行分类,并检查哪些文件夹占用了磁盘上的最多空间。您还可以使用尺寸过滤器选项在PC上找到最大的文件。
云深无际
2021/04/14
6.1K0
目录内文件名导出到Excel文件
PS基础之移动工具和分布对齐
如果感觉小方块之间的间距还是偏大或偏小,只要改变两端方块的距离(移上或移下),再使用垂直分布调整即可
兮动人
2021/06/11
1.5K0
PS基础之移动工具和分布对齐
Python3中tkinter模块使用方法详解
https://www.cnblogs.com/aland-1415/p/6849193.html
用户7886150
2020/12/28
5.1K0
ps快捷键
基础操作: ctrl+0=显示全图; ctrl+=放大; ctrl-=缩小; ctrl+j:复制当前图层到一个新层 ; ctrl+1 =实际像素显示。
mcxfate
2020/08/01
4.5K0
如何使用PS简单抠图
哈喽!各位小伙伴大家好呀! 之前写到了制作电子邀请函,本期就来说说如何制作一些素材, 也就是如何用PS抠图,看见一些好的图也能自己抠了。 开始之前当然是需要软件了,小编演示是用的PS 2015 64位
简单并不简单
2019/09/09
2.7K0
摹客RP,新增图文选项卡组件
本月更新,摹客RP新增新的组件——图文选项卡图文选项卡,可用于快速制作手机项目底部导航等模块。摹客协作针对任务管理模块做了不小的调整,评论功能可插入图片,优化了新建任务的流程。摹客DT优化了项目的选中方式,让大家的体验操作更顺畅!
奔跑的小鹿
2022/10/28
1.7K0
摹客RP,新增图文选项卡组件
相关推荐
Visual Studio 2008 每日提示(四)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验