为了方便生成准确的mif数据,以实现特定的透明效果。使用Photoshop将网上下载的Logo修改颜色,保存大小为120*120像素,如图1所示。
图1 ps修改后的Logo
使用Pic2mif软件,将图像转换为彩色(8色)mif文件,得到的是3位位宽,深度为14400的mif数据。以此定制ROM,并将Logo显示到屏幕右上角,显示结果如图2示。
图2 透明背景的Logo显示
相关主要代码如图3示。当扫描到原图像背景为红色的区域时,ROM输出的数据q为“100”。此时让该像素颜色等于背景色,即完成了图像的“浮空显示”(相当于红色区域透明)。另外附上真正的透明度显示计算式,其中透明度a的值在0到1之间取值。
透明后的像素值 = 原像素值*透明度a+背景像素值*(1-透明度a)
/*logo_rom--彩色-3位*/ // localparam // BMP_W = 11'd120, //显示区域宽度 = 图片宽 // BMP_H = 11'd120; //显示区域高度 = 图片高 // // wire pic_area = (hcount>680) && (vcount<120);//行-场 // reg [13:0] pic_addr; // wire [2:0] q; // logo_rom logo_rom( // .address(pic_addr), // .clock(clk), // .q(q) // ); // always@(posedge clk or negedge rst_n) // if(!rst_n) begin // disp_data <= 16'd0; // pic_addr <= 17'd0; // end // else // begin // //display // if(pic_area == 1'b1) begin // pic_addr <= hcount-680 + vcount*BMP_W; // case(q) // 8'b000: disp_data=R2_C1; // 8'b001: disp_data=R1_C1; // 8'b010: disp_data=R1_C0; // 8'b011: disp_data=YELLOW; // 8'b1x0: disp_data=WHITE; // 8'b101: disp_data=WHITE; // 8'b111: disp_data=R0_C0; // default: disp_data <= WHITE; // endcase // end // else // disp_data <= WHITE; // end /*logo_rom-end*/
使用时,去掉 “//” 的注释即可。