文档章节

单色屏幕上画水平线

一贱书生
 一贱书生
发布于 2016/11/19 10:53
字数 556
阅读 18
收藏 0
点赞 0
评论 0

/**

 * 功能:有个单色屏幕存储在一个一维字节数组中,使得8个连续像素可以存放在一个字节里。屏幕宽度位w,

 * 且w可以被8整除(即一个字节不会分布在两行上),屏幕高度可由数组长度和屏幕宽度推算得出。

 * 实现方法drawHorizontalLine(byte[] screen,int width,intx1,intx2,inty),绘制从点(x1,y)

 * 到点(x2,y)的水平线。

 */[java] view plain copy

 

  1. <pre name="code" class="java">    /** 
  2.  * 思路:使用screen[byte_pos]=0xff,一次设定一整个字节。起点和终点剩余部分的位,使用掩码设定。 
  3.  * @param screen 
  4.  * @param width 
  5.  * @param x1 
  6.  * @param x2 
  7.  * @param y 
  8.  */  
  9. public static void drawHorizontalLine(byte[] screen,int width,int x1,int x2,int y){  
  10.     int startOffset=x1%8;  
  11.     int firstFullByte=x1/8;  
  12.     if(startOffset!=0)  
  13.         firstFullByte++;  
  14.       
  15.     int endOffset=x2%8;  
  16.     int lastFullByte=x2/8;  
  17.     if(endOffset!=7)  
  18.         lastFullByte--;  
  19.       
  20.     //设定完整的字节  
  21.     for(int i=firstFullByte;i<=lastFullByte;i++){  
  22.         screen[(width/8)*y+i]=(byte)0xFF;  
  23.     }  
  24.       
  25.     //创建用于线条起点和终点的掩码  
  26.     byte startMask=(byte) (1>>startOffset);  
  27.     byte endMask=(byte) ~(1>>(endOffset+1));  
  28.       
  29.     //设定线条的起点和终点  
  30.     if((x1/8)==(x2/8)){  
  31.         byte mask=(byte) (startMask&endMask);  
  32.         screen[(width/8)*y+(x1/8)]|=mask;  
  33.     }else{  
  34.         if(startOffset!=0){  
  35.             int byteNumber=(width/8)*y+firstFullByte-1;  
  36.             screen[byteNumber]|=startMask;  
  37.         }  
  38.         if(endOffset!=0){  
  39.             int byteNumber=(width/8)*y+lastFullByte+1;  
  40.             screen[byteNumber]|=endMask;  
  41.         }  
  42.     }  

 

扩展:


有一个单色屏幕储存在一维数组中,其中数组的每个元素代表连续的8位的像素的值,请实现一个函数,将第x到第y个像素涂上颜色(像素标号从零开始),并尝试尽量使用最快的办法。
给定表示屏幕的数组screen(数组中的每个元素代表连续的8个像素,且从左至右的像素分别对应元素的二进制的从低到高位),以及int x,int y,意义如题意所述,保证输入数据合法。请返回涂色后的新的屏幕数组。
测试样例:
[0,0,0,0,0,0],0,47
返回:[255,255,255,255,255,255]

* \问题分析:
基本上大意就是从第x 到第y位 ,其中的像素全部变为0,如此两种情况 :0-->1, 1-->1 ,所以这时候就很清楚的用 位操作中的 ' | '

 

 

for (int i = x; i <= y;i++)
        {
            int k = i % 8;
            int t = i / 8;
            screen[t] = screen[t] | (1<<k);
        }

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 723
码字总数 600072
作品 0
CSS3 响应式布局 @media

定义和使用 使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。@media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。当你...

WolfX
2016/03/02
30
0
帮助手势识别--HelpGestureRecognizer

HelpGestureRecognizer 提供一个简单方法让用户添加帮助功能到手机应用上,不需要按钮,也不会占用屏幕的空间。HelpGestureRecognizer 是一款帮助手势识别工具,当用户在屏幕上画或者点一个问...

叶秀兰
2014/01/04
291
0
CSS3 多媒体查询

CSS2 多媒体类型 规则在 CSS2 中有介绍,针对不同媒体类型可以定制不同的样式规则。 例如:你可以针对不同的媒体类型(包括显示器、便携设备、电视机,等等)设置不同的样式规则。 但是这些多媒...

小菜鸡1
2016/11/14
17
0
python学习笔记--趣学Python编程第十三章的例子

弹球 由反弹球和球拍构成的游戏。球会在屏幕上飞过来,玩家要用球拍把它弹回去 画布和画弹球 引入模块 创建窗体 创建Ball类 创建Ball类,它有两个参数,一个是画布,另一个是球的颜色 把画布...

cysky
06/28
0
0
这个服务员在计算机屏幕上干什么?

Richard Gatarski和几个朋友打算在瑞典诺尔彻平市搞一次聚餐,他们几个星期前就在市中心的一家看起来不错的意大利餐馆预订了一张桌子。 当他们到达那里时,餐馆的领班热情的接待了他们,问他...

红薯
2012/03/12
4.8K
39
【QT技术应用】2D绘图

2D绘图 Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作 如画点,画线,填充,变换,alpha通道等...

长平狐
2012/09/03
1K
0
Android SurfaceView

下面就贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置 代码: Activity package com.view; import android.app.Activity;imp...

鉴客
2012/03/09
192
0
Android之SurfaceView

下面就贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置 代码: Activity package com.view; import android.app.Activity;imp...

晨曦之光
2012/03/01
222
0
Android SurfaceView

下面就贴上一个小程序代码,主要运用SurfaceView来实现在屏幕上画一个圆,你可以通过按方向键和触摸屏幕来改变圆的位置 代码: Activity package com.view; import android.app.Activity;imp...

长平狐
2013/01/06
123
0
奥巴马成为第一位写程序的美国总统

美国总统奥巴马告诉世界每个人都应该学习如何写代码,他以身作则成为第一位写程序的美国总统。12月8日,奥巴马写了个非常简单的程序——整个程序的功能就是在屏幕上画一个正方形。推广计算机...

开源中国真理部部长
2014/12/09
4.2K
19

没有更多内容

加载失败,请刷新页面

加载更多

下一页

《射雕英雄传》书摘

1. 我虽是个飘泊江湖的贫家女子,可不是低三下四、不知自爱之人。你如真心爱我,须当敬我重我。我此生决无别念,就是钢刀架颈,也决意跟定了你。将来……将来如有洞房花烛之日,自然……自能...

k91191
9分钟前
0
0
解决:modal中datePicker 选中时,会触发modal的hidden.bs.modal事件

最近项目中发现了一个bug,具体表现为选中模态框上datepicker组件上的日期时,会触发模态框的关闭事件,导致数据编辑无法正常进行。网上搜索了下,解决方法如下: $('.datepicker').on('hid...

Funcy1122
13分钟前
0
0
matplotlib 绘图 常用设置

中文乱码 from pylab import mplmpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的...

阿豪boy
29分钟前
0
0
Redis分布式锁的正确实现方式

前言 分布式锁一般有三种实现方式: 1.数据库乐观锁 2.基于Redis的分布式锁; 3.基于Zookeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis...

大海201506
56分钟前
0
0
ClassNotFoundException: javax.el.ELManager

这个是因为tomcat7中的el-api2.2,有些版本太低,建议升级tomcat到8.0,利用el-api3.0就会解决这个问题。

无语年华
今天
0
0
Jvm堆内存的划分结构和优化,垃圾回收详解(详细解答篇)

在JVM中堆空间划分如下图所示 上图中,刻画了Java程序运行时的堆空间,可以简述成如下2条 1.JVM中堆空间可以分成三个大区,新生代、老年代、永久代 2.新生代可以划分为三个区,Eden区,两个幸...

嘻哈开发者
今天
1
0
CentOS 7.4 设置系统字符编码

1.语言变量LANG在 /etc/locale 文件中。 2.可以通过/ect/profile 来修改LC_TYPE 变量的值 添加如下代码 export LC_ALL="zh_CN.GBK" export LANG="zh_CN.GBK" 到profile文件中,变量的可以修改...

qimh
今天
1
0
Kafka相关使用

安装前提,需要有jdk环境,还有zookeeper环境 zookeeper下载地址:https://www.apache.org/dyn/closer.cgi/zookeeper/ zookeeper安装参考:https://www.jianshu.com/p/f7037105db46 kafka的下......

朝如青丝暮成雪
今天
1
0
CentOS7 解决无法使用tab自动补全 tab代码提示

一、前言 对于刚刚开始学习linux的新人来说,linux的一切都显着神秘,只能惊叹于大牛在Linux上行云流水的操作。今天介绍一下在linux中自动补全的功能。 对于新人来说,在不懂得技巧的情况下,...

ziluopao
今天
0
0
redis安装

https://www.cnblogs.com/feijl/p/6879929.html

ghou-靠墙哭
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部