首页 > 其他 > 详细

9.5位操作(八)——单色屏幕上画水平线

时间:2015-08-07 13:19:58      阅读:219      评论:0      收藏:0      [点我收藏+]
/**
 * 功能:有个单色屏幕存储在一个一维字节数组中,使得8个连续像素可以存放在一个字节里。屏幕宽度位w,
 * 且w可以被8整除(即一个字节不会分布在两行上),屏幕高度可由数组长度和屏幕宽度推算得出。
 * 实现方法drawHorizontalLine(byte[] screen,int width,intx1,intx2,inty),绘制从点(x1,y)
 * 到点(x2,y)的水平线。
 */
	<pre name="code" class="java">	/**
	 * 思路:使用screen[byte_pos]=0xff,一次设定一整个字节。起点和终点剩余部分的位,使用掩码设定。
	 * @param screen
	 * @param width
	 * @param x1
	 * @param x2
	 * @param y
	 */
	public static void drawHorizontalLine(byte[] screen,int width,int x1,int x2,int y){
		int startOffset=x1%8;
		int firstFullByte=x1/8;
		if(startOffset!=0)
			firstFullByte++;
		
		int endOffset=x2%8;
		int lastFullByte=x2/8;
		if(endOffset!=7)
			lastFullByte--;
		
		//设定完整的字节
		for(int i=firstFullByte;i<=lastFullByte;i++){
			screen[(width/8)*y+i]=(byte)0xFF;
		}
		
		//创建用于线条起点和终点的掩码
		byte startMask=(byte) (1>>startOffset);
		byte endMask=(byte) ~(1>>(endOffset+1));
		
		//设定线条的起点和终点
		if((x1/8)==(x2/8)){
			byte mask=(byte) (startMask&endMask);
			screen[(width/8)*y+(x1/8)]|=mask;
		}else{
			if(startOffset!=0){
				int byteNumber=(width/8)*y+firstFullByte-1;
				screen[byteNumber]|=startMask;
			}
			if(endOffset!=0){
				int byteNumber=(width/8)*y+lastFullByte+1;
				screen[byteNumber]|=endMask;
			}
		}
	}



版权声明:本文为博主原创文章,未经博主允许不得转载。

9.5位操作(八)——单色屏幕上画水平线

原文:http://blog.csdn.net/shangqing1123/article/details/47337359

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!