“玩板”+在STM32F7DISC上重玩micropython(3)
<div class='showpostmsg'> 本帖最后由 dcexpert 于 2020-2-17 22:19 编辑<p><strong>图层(layer)</strong></p>
<p> </p>
<p>STM32F7DISC开发板的图形功能很丰富,其中一个很有特点的功能是图层(layer),layer的概念类似于photoshop中的图层。图层有很多用法,比如可以将图层作为缓冲区,先在一个图层中绘图,然后一次性快速显示;也可以设定图层的透明度(set_transparency),或者设定图层的显示窗口位置和大小等。受到RAM限制,目前仅支持2个图层。0是背景图层,1是前景图层。在图层1绘图时,如果颜色中设置了alpha通道,可以显示出透明色,和图层0进行叠加。</p>
<p> </p>
<p> </p>
<p>图层的主要函数:</p>
<ul>
<li>layer_default_init(),初始化</li>
<li>select_layer(n),选择当前图层。</li>
<li>set_layer_window(n, x, y, width, height),设置一个图层窗口位置的大小</li>
<li>set_layer_visible(n, show),n代表图层,show代表显示或隐藏</li>
<li>set_transparency(n, tr),n代表图层,tr是透明度(0代表完全透明,255代表不透明)</li>
<li>set_layer_address(),设置图层地址,用法还不清楚</li>
</ul>
<p> </p>
<ul>
<li><span style="color:#2ecc71;">因为缺少文档,一些功能是不断测试中摸索出来的,可能存在错误或者不准确的地方,欢迎大家指出。</span></li>
</ul>
<p> </p>
<p>具体使用方法请参考2楼的demo,特别注意使用alpha通道开窗和透明度的效果。</p>
<p> </p>
<p><br />
<b><font color="#5E7384">此内容由EEWORLD论坛网友<font size="3">dcexpert</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b><br />
</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p><strong>测试程序</strong></p>
<pre>
<code class="language-python">from time import sleep_ms
import lcdF7D as lcd
import tchF7D as ts
MAX_X = 480
MAX_Y = 272
lcd.init()
lcd.select_layer(0)
lcd.set_text_color(0xFF)
lcd.fill_rect(50, 50, 200, 100)
lcd.set_text_color(0xFF00)
lcd.fill_rect(200, 80, 200, 100)
lcd.set_text_color(0xFF0000)
lcd.fill_rect(100, 100, 200, 100)
lcd.set_text_color(0xFF00)
lcd.set_font(20)
lcd.display_string_at(0, 0, 'rect show on the screen', 0)
lcd.select_layer(1)
lcd.set_text_color(0xFF0000)
lcd.set_font(24)
lcd.display_string_at(0, 60, 'no rect show on the screen', 0)
lcd.set_text_color(0x80, 0)
lcd.fill_rect(180, 90, 30, 30)
sleep_ms(2000)
lcd.set_layer_visible(1, 0)
sleep_ms(2000)
lcd.set_layer_visible(1, 1)
for i in range(255):
lcd.set_transparency(1, 255 - i)
sleep_ms(10)
for i in range(220):
lcd.set_transparency(1, i)
sleep_ms(10)
</code></pre>
<p> </p>
<p>首先选择图层0,然后绘制3个不同颜色矩形。这时矩形是不会显示在屏幕上的。然后将图层1设置为不可见,就可以看到图层0的矩形了。再设置图层1可见,并逐步调整图层1的透明度。</p>
<p> </p>
<p></p>
本帖最后由 dcexpert 于 2020-2-20 12:32 编辑
<p>又一个测试图层显示的小程序,轮流在两个图层上print数字。</p>
<p> </p>
<p></p>
<ul>
<li></li>
<li></li>
</ul>
页:
[1]