java关于像素的题目,跪求完整答案!
会加分到200分!求完整文件94545276@qq.com一共三个问题,要分开做三个package(1)创建一个interface叫Pixel以及一个class叫Colo...
会加分到200分!求完整文件94545276@qq.com
一共三个问题,要分开做三个package
(1)创建一个interface叫Pixel以及一个class叫ColorPixel
Pixel要包含下面的方法:
double getRed();
double getGreen();
double getBlue();
double getBrightness();
前三个是提取像素的红,绿,蓝三原色的值,最后一个提取像素的总的亮度。已知:
亮度 = 0.2126* 红 + 0.7152 * 绿 + 0.0722 * 蓝
然后ColorPixel要用到这个:
publicColorPixel(double red,double green,double blue)
再建立一个interface叫Frame和一个class叫ColorFrame
Frame要包含下列方法:
int getWidth();
int getHeight();
Pixel getPixel(int x,int y);
void setPixel(int x,int y,Pixel p);
getWidth() 和 getHeight()要分别返回边框的宽度和长度
getPixel()返回在特定(x,y)位置的像素。
setPixel()要把像素放在特定的(x,y)的位置
之后ColorFrame这个class要用到下面两个:
publicColorFrame(intwidth,intheight,ColorPixel init_color)
publicColorFrame(int width,int height)
第一个的作用是要建立一个新的,有特定长宽而且每个像素都要有,颜色是init_color的边框
第二个的作用相似但是颜色要用灰色(红=绿=蓝=0.5)
然后检查getPixel()和setPixel()的输入值要有效,如果无效要用 runtimeexception。同时确保setPixel()的值不是null。
(2)拷贝第一个的package,然后在Pixel这个interface下添加下面两个方法:
Pixel lighten(double factor);
Pixel darken(double factor);
这两个方法要让一个Pixel的对象产生另一个新的Pixel对象,用系数值让这个新对象要比原先的亮(lighten)或者暗(darken)。这个系数要在0.0到1.0之间(如果不在也要用runtime exception排除)。
变亮的公式:
新的=现有的*(1.0–系数)+系数
现有的是现有的红,绿,或者蓝的数值,新的是新像素的新的红绿蓝的值。
变暗的公式:
新的=现有的*(1.0–系数)
接下来定义一个新的class叫PixelIterator,这个是用来implement这个interface: java.util.Iterator<Pixel>。
这里不需要用remove(),直接用runtime exception扔掉无效的值。
PixelIterator这个class要用到这个:
publicPixelIterator(Frame frame)
迭代器要扫描每个像素值给构造器,顺序是“光栅扫描”的顺序,即一行一行从左往右,从上到下。
然后加上这个构造器到Frame这个interface里面:
java.util.Iterator<Pixel> iterator();
同时更新ColorFrame这个class让它可以implement以上的方法。应该是要可以返回一个新的PixelIterator 的对象。
(3)建立新的package然后拷贝整个(2),创建两个叫GrayPixel 和 GrayFrame的class让他们可以implement Pixel和Frame这两个interface。
GrayPixel代表黑白的像素(就是红绿蓝值是相同的),并且要用到:
publicGrayPixel(level)
implement的时候要封装一个double的值,这个值代表灰度,大小从0.0(纯黑)到1.0(纯白)。
GrayFrame是一个GrayPixel的边框。它应该要用到和ColorFrame相同的构造器(就是一个接受长宽和初始的GrayPixel值,另一个指定长宽并且初始设定所有的像素变成灰色)
添加下面这个方法到Frame这个interface中:
java.util.Iterator<Pixel> zigzag();
这个方法要返回一个像素迭代器,让他的扫面方法是如图所示方法:
注意第一步是从左上角往右走。
在ZigZagIterator这个class中implement这个迭代器。 展开
一共三个问题,要分开做三个package
(1)创建一个interface叫Pixel以及一个class叫ColorPixel
Pixel要包含下面的方法:
double getRed();
double getGreen();
double getBlue();
double getBrightness();
前三个是提取像素的红,绿,蓝三原色的值,最后一个提取像素的总的亮度。已知:
亮度 = 0.2126* 红 + 0.7152 * 绿 + 0.0722 * 蓝
然后ColorPixel要用到这个:
publicColorPixel(double red,double green,double blue)
再建立一个interface叫Frame和一个class叫ColorFrame
Frame要包含下列方法:
int getWidth();
int getHeight();
Pixel getPixel(int x,int y);
void setPixel(int x,int y,Pixel p);
getWidth() 和 getHeight()要分别返回边框的宽度和长度
getPixel()返回在特定(x,y)位置的像素。
setPixel()要把像素放在特定的(x,y)的位置
之后ColorFrame这个class要用到下面两个:
publicColorFrame(intwidth,intheight,ColorPixel init_color)
publicColorFrame(int width,int height)
第一个的作用是要建立一个新的,有特定长宽而且每个像素都要有,颜色是init_color的边框
第二个的作用相似但是颜色要用灰色(红=绿=蓝=0.5)
然后检查getPixel()和setPixel()的输入值要有效,如果无效要用 runtimeexception。同时确保setPixel()的值不是null。
(2)拷贝第一个的package,然后在Pixel这个interface下添加下面两个方法:
Pixel lighten(double factor);
Pixel darken(double factor);
这两个方法要让一个Pixel的对象产生另一个新的Pixel对象,用系数值让这个新对象要比原先的亮(lighten)或者暗(darken)。这个系数要在0.0到1.0之间(如果不在也要用runtime exception排除)。
变亮的公式:
新的=现有的*(1.0–系数)+系数
现有的是现有的红,绿,或者蓝的数值,新的是新像素的新的红绿蓝的值。
变暗的公式:
新的=现有的*(1.0–系数)
接下来定义一个新的class叫PixelIterator,这个是用来implement这个interface: java.util.Iterator<Pixel>。
这里不需要用remove(),直接用runtime exception扔掉无效的值。
PixelIterator这个class要用到这个:
publicPixelIterator(Frame frame)
迭代器要扫描每个像素值给构造器,顺序是“光栅扫描”的顺序,即一行一行从左往右,从上到下。
然后加上这个构造器到Frame这个interface里面:
java.util.Iterator<Pixel> iterator();
同时更新ColorFrame这个class让它可以implement以上的方法。应该是要可以返回一个新的PixelIterator 的对象。
(3)建立新的package然后拷贝整个(2),创建两个叫GrayPixel 和 GrayFrame的class让他们可以implement Pixel和Frame这两个interface。
GrayPixel代表黑白的像素(就是红绿蓝值是相同的),并且要用到:
publicGrayPixel(level)
implement的时候要封装一个double的值,这个值代表灰度,大小从0.0(纯黑)到1.0(纯白)。
GrayFrame是一个GrayPixel的边框。它应该要用到和ColorFrame相同的构造器(就是一个接受长宽和初始的GrayPixel值,另一个指定长宽并且初始设定所有的像素变成灰色)
添加下面这个方法到Frame这个interface中:
java.util.Iterator<Pixel> zigzag();
这个方法要返回一个像素迭代器,让他的扫面方法是如图所示方法:
注意第一步是从左上角往右走。
在ZigZagIterator这个class中implement这个迭代器。 展开
2个回答
展开全部
这个题应该属于图形学基础吧。借你的题锻练zigzag了。因为锻炼自己所以才会代做。
package package_three;
import java.util.Iterator;
public class ZigZagIterator implements Iterator<Pixel> {
private Frame fr;
public int x,y;
public ZigZagIterator(Frame frame){
this.fr=frame;
x=y=0;
}
@Override public boolean hasNext() {
return (y*fr.getWidth()+x) < (fr.getWidth()*fr.getHeight());
}
@Override public Pixel next() {
Pixel p=fr.getPixel(x, y);
if((x+y)%2==0){
if(x<(fr.getWidth()-1)) x++;
else y+=2;
if(y>0) y--;
}else{//odd
if(y<(fr.getHeight()-1)) y++;
else x+=2;
if(x>0) x--;
}
return p;
}
@Override public void remove() { throw new RuntimeException("无效方法");}
}
以上是zigzag,其余的完整代码在附件src.zip中间。自估计基本无误,如果还有小瑕疵,告知一下,我可以改改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已经发了,LZ查收
更多追问追答
追问
请问有检查过吗?怎么感觉最后一个的frame没有加上zigzag这个。。?
出现的问题都在第三个package:
ColorFrame这个,第二行:The type ColorFrame mus implement the inheritedabtract method Frame.zigzag()
GrayFrame这个,同样的问题。
追答
的确少了
在GrayFrame里面加上这个就可以
public ZigZagItertor<Pixel> zigIterator(){
return new ZigZagItertor<Pixel>(this);
}
不过我感觉你的问题还是没给清楚好多东西。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询