PS中画布的大小是如何确定的_ps默认画布大小是多少

PS中画布的大小是如何确定的_ps默认画布大小是多少,第1张

横幅尺寸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方法!!急!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9642976.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存