横幅尺寸4m12m,PS新建画布尺寸4m12m,分辨率72像素,需要用的照片的分辨率也只要72就行了这样直接把照片拉到横幅里就能用,注意照片先处理好再拉到横幅里
在Turtle绘图中,可以使用`turtlesetup(width, height, startx, starty)`函数来设置画布的大小和位置。其中,`width`和`height`分别表示画布的宽度和高度,`startx`和`starty`表示画布左上角的起始坐标。
如果要改变比例尺,可以通过调整画布的大小来实现。例如,如果要将比例尺从默认的1像素=1单位长度改为2像素=1单位长度,可以将画布的宽度和高度都乘以2,然后再将绘制的图形缩小一半。
具体实现方法如下:
```python
import turtle
# 设置画布大小为400400像素
turtlesetup(400, 400)
# 绘制一个边长为100的正方形
turtleforward(100)
turtleleft(90)
turtleforward(100)
turtleleft(90)
turtleforward(100)
turtleleft(90)
turtleforward(100)
# 将画布大小扩大一倍
turtlesetup(800, 800)
# 缩小绘制的图形一半,实现比例尺为2像素=1单位长度
turtleshapesize(05, 05, 05)
turtledone()
```
在上面的代码中,首先使用`turtlesetup(400, 400)`函数设置画布大小为400400像素,然后绘制一个边长为100的正方形。接着,使用`turtlesetup(800, 800)`函数将画布大小扩大一倍,然后使用`turtleshapesize(05, 05, 05)`函数将绘制的图形缩小一半,实现比例尺为2像素=1单位长度。最后调用`turtledone()`函数显示绘制结果。
改变画布大小和缩放绘制的图形都会影响绘制结果的比例尺,因此需要根据具体需求进行调整。
你调用Mouse类的darw方法后就可以画那个图的,只是那个图不会显示(其实己经画过一次了),因为JFrame显示完后,会重画一次。
这里的重画是窗口都有的功能,也是一个显示功能,在JFrame里有个paint事件,窗口重画时会调用这个paint事件,这样你所画的图就会不见了,所以你看不到这个画。
一般用JFrame来使用Graphics画图,都会将画的方法或接口放到paint事件中,通过一些变量或方法来控制画图,这样所画片才会正常显示出来,不然会产生你现在看不到的问题。
建议:在有多个画图方法存在的时候最好使用双缓冲方法,这样可以避免闪烁问题。
本来我写了好详细的,说我内容有不可发表内容,检查了几次,还是发表不了,只好简单说一下。
在Hole类中加入:
public void paint(Graphics g){
Mouse ms = new Mouse();
msdraw(thisgetGraphics());
}
就可以画那个图了,只是NewPanel中的图会不正常显示,这是与代码上的结构方法有关,事实上不应该采用这种代码结构,这样会产生许多问题。
一般使用Graphics来画图,都应将画的方法与画的容器分开,而画在同一空间的画法应画在同一个容器内,这里可将上面paint方法放到NewPanel类中,但是在NewPanel类中,你重写了paintComponent方法,所以可以在paintComponent方法中加入
Mouse ms = new Mouse();
msdraw(g);
也同样可以实现的正常显示,但是这样对画图方法的 *** 作会显得不合理也不方便。
所以较好的代码结构可以如下:
Draw类:类内有方法drawbg(Graphics g);画背景的方法,要传入Graphics对像、drawimage(Graphics g);画的方法,要传入Graphics对像。
Panel类:用于画图的容器,在Panel类的paint方法中加入所要画的方法,可以通过布尔型的参数if(boolean b){draw(thisgetGraphics());}来控制画图。
这样的代码结构还是有点粗的,不过对于实现你所要的功能是足够了。
注:repaint(); 方法都会调用到paint方法,所以楼上所说“楼主,你画完以后,调用重绘方法没?”,repaint是强制重画方法,这与窗口本身自动重画是同一种方式,这方法只会调用到paint方法,不会调用到main方法,都不会调用到Mouse类的draw方法,楼上所说这里调用repaint方法是无用功来的。在中国网站上,许多人都没有亲自检验过就发送自己的方法,无语。
//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。\x0d\import javaawt;\x0d\import javaawtevent;\x0d\import javautil;\x0d\\x0d\//世界时钟\x0d\public class TimerTest {\x0d\public static void main(String[] args) {\x0d\new TimerTestFrame("世界时钟");\x0d\}\x0d\}\x0d\\x0d\class TimerTestFrame extends Frame {\x0d\/\x0d\ \x0d\/\x0d\private static final long serialVersionUID = 1L;\x0d\\x0d\public TimerTestFrame(String s) {\x0d\super(s);\x0d\addWindowListener(new WindowAdapter() {\x0d\public void windowClosing(WindowEvent e) {\x0d\dispose();\x0d\Systemexit(0);\x0d\}\x0d\});\x0d\setLayout(new GridLayout(2, 6));\x0d\\x0d\ClockCanvas clk1 = new ClockCanvas("北京", "GMT+8"); // 创建时钟\x0d\ClockCanvas clk2 = new ClockCanvas("巴黎", "GMT+2");\x0d\ClockCanvas clk3 = new ClockCanvas("华盛顿", "GMT-4");\x0d\ClockCanvas clk4 = new ClockCanvas("洛衫矶", "GMT-7");\x0d\ClockCanvas clk5 = new ClockCanvas("伦敦", "GMT+1");\x0d\ClockCanvas clk6 = new ClockCanvas("芝加哥", "GMT-5");\x0d\add(clk1);\x0d\add(clk2);\x0d\add(clk3);\x0d\add(clk4);\x0d\add(clk5);\x0d\add(clk6);\x0d\setSize(500, 350); // 设置框架宽高\x0d\setVisible(true);\x0d\}\x0d\}\x0d\\x0d\class ClockCanvas extends Canvas implements Runnable {\x0d\/\x0d\ \x0d\/\x0d\private static final long serialVersionUID = 1L;\x0d\\x0d\private int seconds = 0;\x0d\\x0d\private String city;\x0d\\x0d\private GregorianCalendar calendar;\x0d\\x0d\Thread t;\x0d\\x0d\public ClockCanvas(String c, String tz) {\x0d\city = c;\x0d\//也可以通过TimeZonesetTimeZone(String n)函数改变时区,n为时区参数名。\x0d\calendar = new GregorianCalendar(TimeZonegetTimeZone(tz));\x0d\t = new Thread(this);\x0d\tstart();\x0d\setSize(125, 125); // 设置画布大小\x0d\setBackground(Colorblack);\x0d\}\x0d\\x0d\// 重写父类的方法绘制时钟图形\x0d\public void paint(Graphics g) {\x0d\Graphics2Dg2d = (Graphics2D) g;\x0d\BasicStroke bstroke = new BasicStroke(20f);\x0d\g2dsetStroke(bstroke);\x0d\g2dsetColor(Colorgreen);\x0d\g2ddrawOval(0, 0, 100, 100);\x0d\bstroke = new BasicStroke(50f);\x0d\g2dsetStroke(bstroke);\x0d\g2ddrawLine(50, 0, 50, 5);\x0d\g2ddrawLine(0, 50, 5, 50);\x0d\g2ddrawLine(50, 95, 50, 98);\x0d\g2ddrawLine(95, 50, 98, 50);\x0d\double hourAngle = 2 MathPI (seconds - 3 60 60)\x0d\/ (12 60 60);\x0d\double minuteAngle = 2 MathPI (seconds - 15 60) / (60 60);\x0d\double secondAngle = 2 MathPI (seconds - 15) / (60);\x0d\bstroke = new BasicStroke(50f);\x0d\g2dsetStroke(bstroke);\x0d\g2ddrawLine(50, 50, 50 + (int) (30 Mathcos(hourAngle)),\x0d\50 + (int) (30 Mathsin(hourAngle)));\x0d\bstroke = new BasicStroke(30f);\x0d\g2dsetStroke(bstroke);\x0d\g2ddrawLine(50, 50, 50 + (int) (40 Mathcos(minuteAngle)),\x0d\50 + (int) (40 Mathsin(minuteAngle)));\x0d\bstroke = new BasicStroke(10f);\x0d\g2dsetStroke(bstroke);\x0d\g2ddrawLine(50, 50, 50 + (int) (45 Mathcos(secondAngle)),\x0d\50 + (int) (45 Mathsin(secondAngle)));\x0d\g2dsetColor(Colorred);\x0d\g2ddrawString(city, 35, 115);\x0d\}\x0d\\x0d\public void timeElapsed() {\x0d\//new Date()()获得当前时间\x0d\Systemoutprintln(new Date()());\x0d\calendarsetTime(new Date()());\x0d\seconds = calendarget(CalendarHOUR) 60 60\x0d\+ calendarget(CalendarMINUTE) 60\x0d\+ calendarget(CalendarSECOND);\x0d\}\x0d\\x0d\public void run() {\x0d\try {\x0d\while (true) {\x0d\Threadsleep(300);\x0d\timeElapsed();\x0d\repaint();\x0d\}\x0d\} catch (InterruptedException e) {\x0d\}\x0d\}\x0d\}
把压缩成3232这个不难,java有这样的类提供了方法
BufferedImage bi = new BufferedImage(w 2 / scale, h 2 / scale, bmgetType());//画布大小
Graphics2D g2 = bicreateGraphics();
g2drawImage(bm, 0, 0, w 2 / scale, h 2 / scale, null); //绘制缩小后的图
// 转换成JPEG图像格式
JPEGImageEncoder encoder = JPEGCodeccreateJPEGEncoder(bos);
JPEGEncodeParam jpeg = encodergetDefaultJPEGEncodeParam(bi);
jpegsetQuality(1f, false);
encodersetJPEGEncodeParam(jpeg);
encoderencode(bi);
byte[] data = bostoByteArray();
但是要减少颜色数的话,这个比较麻烦,这个首先需要知道中
颜色空间,比如16色,32色等,你需要读取文件中的内容,然后根据头的信息
读取每个像素的RGB值(如果是RGB空间),并对每一个像素进行 颜色 设置
//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。
import javaawt;
import javaawtevent;
import javautil;
//世界时钟
public class TimerTest {
public static void main(String[] args) {
new TimerTestFrame("世界时钟");
}
}
class TimerTestFrame extends Frame {
/
/
private static final long serialVersionUID = 1L;
public TimerTestFrame(String s) {
super(s);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
Systemexit(0);
}
});
setLayout(new GridLayout(2, 6));
ClockCanvas clk1 = new ClockCanvas("北京", "GMT+8"); // 创建时钟
ClockCanvas clk2 = new ClockCanvas("巴黎", "GMT+2");
ClockCanvas clk3 = new ClockCanvas("华盛顿", "GMT-4");
ClockCanvas clk4 = new ClockCanvas("洛衫矶", "GMT-7");
ClockCanvas clk5 = new ClockCanvas("伦敦", "GMT+1");
ClockCanvas clk6 = new ClockCanvas("芝加哥", "GMT-5");
add(clk1);
add(clk2);
add(clk3);
add(clk4);
add(clk5);
add(clk6);
setSize(500, 350); // 设置框架宽高
setVisible(true);
}
}
class ClockCanvas extends Canvas implements Runnable {
/
/
private static final long serialVersionUID = 1L;
private int seconds = 0;
private String city;
private GregorianCalendar calendar;
Thread t;
public ClockCanvas(String c, String tz) {
city = c;
//也可以通过TimeZonesetTimeZone(String n)函数改变时区,n为时区参数名。
calendar = new GregorianCalendar(TimeZonegetTimeZone(tz));
t = new Thread(this);
tstart();
setSize(125, 125); // 设置画布大小
setBackground(Colorblack);
}
// 重写父类的方法绘制时钟图形
public void paint(Graphics g) {
Graphics2Dg2d = (Graphics2D) g;
BasicStroke bstroke = new BasicStroke(20f);
g2dsetStroke(bstroke);
g2dsetColor(Colorgreen);
g2ddrawOval(0, 0, 100, 100);
bstroke = new BasicStroke(50f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 0, 50, 5);
g2ddrawLine(0, 50, 5, 50);
g2ddrawLine(50, 95, 50, 98);
g2ddrawLine(95, 50, 98, 50);
double hourAngle = 2 MathPI (seconds - 3 60 60)
/ (12 60 60);
double minuteAngle = 2 MathPI (seconds - 15 60) / (60 60);
double secondAngle = 2 MathPI (seconds - 15) / (60);
bstroke = new BasicStroke(50f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 50, 50 + (int) (30 Mathcos(hourAngle)),
50 + (int) (30 Mathsin(hourAngle)));
bstroke = new BasicStroke(30f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 50, 50 + (int) (40 Mathcos(minuteAngle)),
50 + (int) (40 Mathsin(minuteAngle)));
bstroke = new BasicStroke(10f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 50, 50 + (int) (45 Mathcos(secondAngle)),
50 + (int) (45 Mathsin(secondAngle)));
g2dsetColor(Colorred);
g2ddrawString(city, 35, 115);
}
public void timeElapsed() {
//new Date()()获得当前时间
Systemoutprintln(new Date()());
calendarsetTime(new Date()());
seconds = calendarget(CalendarHOUR) 60 60
+ calendarget(CalendarMINUTE) 60
+ calendarget(CalendarSECOND);
}
public void run() {
try {
while (true) {
Threadsleep(300);
timeElapsed();
repaint();
}
} catch (InterruptedException e) {
}
}
}
createMultiplePieChart这个方法生成的多个图是可以布局的,但是他是你datasetaddValue()有几个他就生成几个图。而且都是一样的。
用java图形用户界面来做那就用java的布局管理器类来做如下:
JPanel panel = new JPanel(new GridLayout(2, 2));
//new GridLayout(2, 2)网格型的布局处理器,就是把容器被分成大小相等的矩形,一个矩形中放置一个组件。这是个2行2列的布局
DefaultCategoryDataset dataset=new DefaultCategoryDataset();
datasetaddValue(233, "Section 1", "Section");
datasetaddValue(565, "Section 2", "Section");
datasetaddValue(433, "Section 3", "Section");
datasetaddValue(111, "Section 4", "Section");
JFreeChart chart1 = ChartFactorycreateMultiplePieChart("Multiple Pie Chart", dataset,TableOrderBY_ROW,
true,true, false );
paneladd(new ChartPanel(chart1));
panelsetPreferredSize(new Dimension(800, 600));//设置整个画布的大小
这样你生成的图就会是2行2列的,要其他的只要改new GridLayout(2, 2)这个就好了。还有其他多种布局方式,如FlowLayout,BorderLayout
以上就是关于PS中画布的大小是如何确定的_ps默认画布大小是多少全部的内容,包括:PS中画布的大小是如何确定的_ps默认画布大小是多少、turtle如何改比例尺、关于java Graphics类的drawImages方法!!急!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)