谁有用51单片机控制12864显示数字时钟的程序!急求!不用ds1302;简单一点就好。有好的答案加分!

谁有用51单片机控制12864显示数字时钟的程序!急求!不用ds1302;简单一点就好。有好的答案加分!,第1张

里面有128564显示汉字的程序,自己研究下,不过是用msp430控制的,你改改端口i就可以了。

#include "msp430x26x.h"

#define uchar unsigned char

#define uint unsigned int

#define iDat 1 //数据标志

#define iCmd 0 //指令标志

#define LCDb_RS 0x20 //定义四个控制引脚

#define LCDb_RW 0x40

#define LCDb_E 0x80

#define LCDb_RST 0x04

#define LCDb_L1 0x80 //第一行的地址

#define LCDb_L2 0x90 //第二行的地址

#define LCDb_L3 0x88 //第三行的地址

#define LCDb_L4 0x98 //第四行的地址

#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制 *** 作

#define LCDb_SET_RW P1OUT|=LCDb_RW

#define LCDb_SET_E P1OUT|=LCDb_E

#define LCDb_SET_RST P8OUT|=LCDb_RST

#define LCDb_CLR_RS P1OUT&=~LCDb_RS

#define LCDb_CLR_RW P1OUT&=~LCDb_RW

#define LCDb_CLR_E P1OUT&=~LCDb_E

#define LCDb_CLR_RST P8OUT&=~LCDb_RST

#define LCDb_DO P4OUT //输出数据总线端口定义

#define LCDb_FUNCTION 0x38 // 液晶模式为8位,2行,5*8字符

#define LCDb_BASCMD 0x30 // 基本指令集

#define LCDb_CLS 0x01 // 清屏

#define LCDb_HOME 0x02 // 地址返回原点,不改变DDRAM内容

#define LCDb_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动

#define LCDb_C2L 0x10 // 光标左移

#define LCDb_C2R 0x14 // 光标右移

#define LCDb_D2L 0x18 // 屏幕左移

#define LCDb_D2R 0x1C // 屏幕又移

#define LCDb_ON 0x0C // 打开显示

#define LCDb_OFF 0x08 // 关闭显示

unsigned char RXData

unsigned char Seg_Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} //数码管编码

unsigned char Result[5] //整数转化成字符串,给LCD显示

void Delayms(uint MS)

{

uint i,j

for( i=0i<MSi++)

for(j=0j<1141j++)

}

void Delayus(uint US)

{

uint i

US=US*5/4

for( i=0i<USi++)

}

void LCD12864_portini()

{

P1DIR=0xFF

P4DIR=0xFF

P5DIR=0xFF

P8DIR=0xFF

P8OUT |=LCDb_RST

//P1OUT=0xFF

}

/*函数名称: LCD12864_sendbyte

功能: 向12864液晶写入一个字节数据或者指令

*/

void LCD12864_sendbyte(uchar DatCmd, uchar dByte)

{

if (DatCmd == iCmd) //指令 *** 作

LCDb_CLR_RS

else

LCDb_SET_RS

LCDb_CLR_RW //写 *** 作

LCDb_SET_E

LCDb_DO = dByte //写入数据

//Delayus(500)

Delayms(1)

LCDb_CLR_E

}

/*函数名称: LCD12864_sendstr

功能: 向12864液晶写入一个字符串

参数: ptString--字符串指针

返回值 : 无

*/

void LCD12864_sendstr(uchar *ptString)

{

while((*ptString)!='\0') //字符串未结束一直写

{

LCD12864_sendbyte(iDat, *ptString++)

}

}

/*函数名称: LCD12864_clear

功能: 12864液晶清屏

参数: 无

返回值 : 无

*/

void LCD12864_clear(void)

{

LCD12864_sendbyte(iCmd,LCDb_CLS)

Delayms(2)// 清屏指令写入后,2ms 的延时是很必要的!!!

}

/*

函数名称: LCD12864_gotoXY

功能: 移动到指定位置

参数: Row--指定的行

Col--指定的列

返回值 : 无

*/

void LCD12864_gotoXY(uchar Row, uchar Col)

{

switch (Row) //选择行

{

case 2:

LCD12864_sendbyte(iCmd, LCDb_L2 + Col)break //写入第2行的指定列

case 3:

LCD12864_sendbyte(iCmd, LCDb_L3 + Col)break //写入第3行的指定列

case 4:

LCD12864_sendbyte(iCmd, LCDb_L4 + Col)break //写入第4行的指定列

default:

LCD12864_sendbyte(iCmd, LCDb_L1 + Col)break //写入第1行的指定列

}

}

/*

函数名称: LCD12864_initial

功能: 12864液晶初始化

*/

void LCD12864_initial(void)

{

Delayms(100) // 等待内部复位

LCD12864_portini() //端口初始化

LCD12864_sendbyte(iCmd, LCDb_FUNCTION) //功能、模式设定

LCD12864_sendbyte(iCmd, LCDb_ON) //打开显示

LCD12864_clear() //清屏

LCD12864_sendbyte(iCmd, LCDb_ENTRY) // 输入模式设定

}

void Int_char(int data)

{

if(data/1000)

{

Result[0]=data/1000+'0'

Result[1]=data/100%10+'0'

Result[2]=data/10%10+'0'

Result[3]=data%10+'0'

Result[4]=0

}

else if(data/100)

{

Result[0]=data/100+'0'

Result[1]=data/10%10+'0'

Result[2]=data%10+'0'

Result[3]=0

}

else if(data/10)

{

Result[0]=data/10%10+'0'

Result[1]=data%10+'0'

Result[2]=0

}

else

{

Result[0]=data%10+'0'

Result[1]=0

}

}

unsigned char Key_Press(void)

{

P7OUT=0xF0

if((P7IN&0x10)&&(P7IN&0x20)&&(P7IN&0x40)&&(P7IN&0x80)) return 0x00

else return 0xFF

}

unsigned char Get_Keycode(void)

{

while(1)

{

P7OUT=0xFE //扫描第一列

if((P7IN&0x10)==0) return 0

else if((P7IN&0x20)==0) return 4

else if((P7IN&0x40)==0) return 8

else if((P7IN&0x80)==0) return 12

P7OUT=0xFD //扫描第二列

if((P7IN&0x10)==0) return 1

else if((P7IN&0x20)==0) return 5

else if((P7IN&0x40)==0) return 9

else if((P7IN&0x80)==0) return 13

P7OUT=0xFB //扫描第三列

if((P7IN&0x10)==0) return 2

else if((P7IN&0x20)==0) return 6

else if((P7IN&0x40)==0) return 10

else if((P7IN&0x80)==0) return 14

P7OUT=0xF7 //扫描第四列

if((P7IN&0x10)==0) return 3

else if((P7IN&0x20)==0) return 7

else if((P7IN&0x40)==0) return 11

else if((P7IN&0x80)==0) return 15

}

}

void Init_compa()

{

CACTL1 = CAON+CAREF_2+CARSEL// Enable Comp, ref = 0.5*Vcc = Vin-

CACTL2 = P2CA0 // Pin to CA0

P1DIR |= 0x01 // P1.0 = o/p direction(CAOUT - LED)

P1SEL |= 0x01 // P1.0 - CAOUT, option select

}

/*

** 函数名称:初始化函数

*/

void Init_IIC(void)

{

P3SEL |= 0x06 // Assign I2C pins to USCI_B0

UCB0CTL1 |= UCSWRST // Enable SW reset

UCB0CTL0 = UCMST + UCMODE_3 + UCSYNC// I2C Master, synchronous mode

UCB0CTL1 = UCSSEL_2 + UCSWRST // Use SMCLK, keep SW reset

UCB0BR0 = 12// fSCL = SMCLK/12 = ~100kHz

UCB0BR1 = 0

UCB0I2CSA = 0x50 // Slave Address is 048h

UCB0CTL1 &= ~UCSWRST// Clear SW reset, resume operation

IE2 |= UCB0RXIE // Enable RX interrupt

_BIS_SR(GIE)

// RXCompare = 0x0 // Used to check incoming data

}

/** 函数名称:字节写函数

*/

void EEPROM_Write(unsigned char high_Address,unsigned char low_Address,unsigned char Word)

{

while (UCB0CTL1 &UCTXSTP) // 确定总线空闲

UCB0CTL1 |= UCTXSTT + UCTR // 发送起始位,确定为发送模式

UCB0TXBUF = high_Address// 发送高位地址

while((IFG2 &UCB0TXIFG)==0) // 判断是否发送完毕

UCB0TXBUF = low_Address // 发送低位地址

while((IFG2 &UCB0TXIFG)==0) // 判断是否发送完毕

UCB0TXBUF = Word// 发送数据

while((IFG2 &UCB0TXIFG)==0) // 判断是否发送完毕

UCB0CTL1 |= UCTXSTP // 发送停止位

while((UCB0CTL1 &UCTXSTP)==1) // 判断停止位是否发送完毕

}

/**

** 函数名称:字节读函数

*/

void EEPROM_readmore()

{

UCB0CTL1 &= ~UCTR // 确定为读

while (UCB0CTL1 &UCTXSTP) // 总线是否空闲

UCB0CTL1 |= UCTXSTT// 发送开始位

}

/*

** 函数名称:字节写函数

**/

void EEPROM_read(unsigned char high_Address,unsigned char low_Address)

{

while (UCB0CTL1 &UCTXSTP) // Ensure stop condition got sent

UCB0CTL1 |= UCTXSTT + UCTR // 发送起始位,确定为写

UCB0TXBUF = high_Address// 发送地址位高位

while((IFG2 &UCB0TXIFG)==0) // 判断是否发送完毕

UCB0TXBUF = low_Address // 发送地址位低位

while((IFG2 &UCB0TXIFG)==0) // 判断是否发送完毕

UCB0CTL1 &= ~UCTR // 确定为接收

while (UCB0CTL1 &UCTXSTP) //

UCB0CTL1 |=UCTXSTT

while((UCB0CTL1 &UCTXSTT)==1)

for(unsigned char i=0x0i<0x2fi++) // 延时确定数据已经被发送出去

UCB0CTL1 |=UCTXSTP + UCTXNACK // 发送停止位和NACK位

}

/*

** 函数名称:接收中断函数

**/

// USCI_B0 Data ISR

#pragma vector = USCIAB0TX_VECTOR

__interrupt void USCIAB0TX_ISR(void)

{

RXData = UCB0RXBUF // Get RX data

Int_char(RXData)

LCD12864_gotoXY(2,0) //第2行,第1列显示

LCD12864_sendstr(Result)

/*

key_code[0]=RXData%10+'0'

key_code[1]=0

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr(key_code)

*/

// __bic_SR_register_on_exit(CPUOFF) // Exit LPM0

}

void Init_UART()

{

P3OUT &= ~(BIT4+BIT5+BIT6+BIT7)

P3SEL = 0xF0// P3.4,5,6,7 = USCI_A0 TXD/RXD USCI_A1 TXD/RXD

UCA0CTL1 |= UCSSEL_1// CLK = ACLK

UCA0BR0 = 0x03 // 32kHz/9600 = 3.41

UCA0BR1 = 0x00 //

UCA0MCTL = UCBRS1 + UCBRS0 // Modulation UCBRSx = 3

UCA0CTL1 &= ~UCSWRST// **Initialize USCI state machine**

IE2 |= UCA0RXIE // Enable USCI_A0 RX interrupt

UCA1CTL1 |= UCSSEL_1// CLK = ACLK

UCA1BR0 = 0x03 // 32kHz/9600 = 3.41

UCA1BR1 = 0x00 //

UCA1MCTL = UCBRS1 + UCBRS0 // Modulation UCBRSx = 3

UCA1CTL1 &= ~UCSWRST// **Initialize USCI state machine**

UC1IE |= UCA1RXIE // Enable USCI_A0 RX interrupt

_BIS_SR(GIE)//使能中断

}

void Init_ADC()

{

ADC12CTL0 = SHT0_2 + ADC12ON// Set sampling time, turn on ADC12

ADC12CTL1 = SHP // Use sampling timer

ADC12IE = 0x01 // Enable interrupt

ADC12CTL0 |= ENC// Conversion enabled

P6DIR &= 0x01 // P6.0, i/p

P6SEL |= 0x01 // P6.0-ADC option select

_BIS_SR(GIE)//使能中断

}

void Start_ADC()

{

ADC12CTL0 |= ADC12SC // Start convn, software controlled

}

#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCI0RX_ISR(void)

{

while (!(IFG2&UCA0TXIFG)) // USCI_A0 TX buffer ready?

UCA0TXBUF = UCA0RXBUF // TX ->RXed character

LCD12864_sendbyte(iDat,UCA0RXBUF)

}

#pragma vector=USCIAB1RX_VECTOR

__interrupt void USCI1RX_ISR(void)

{

while (!(UC1IFG&UCA1TXIFG)) // USCI_A0 TX buffer ready?

UCA1TXBUF = UCA1RXBUF // TX ->RXed character

LCD12864_sendbyte(iDat,UCA0RXBUF)

//UCA1TXBUF = 'z'

}

// ADC12 interrupt service routine

#pragma vector=ADC12_VECTOR

__interrupt void ADC12_ISR (void)

{

int i=ADC12MEM0

Int_char(i)

LCD12864_gotoXY(2,0) //第1行,第1列显示

LCD12864_sendstr(Result)

/*

key_code[0] =i/1000+'0'

key_code[1] =i/100%10+'0'

key_code[2] =i/10%10+'0'

key_code[3] =i%10+'0'

key_code[4] =0

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr(key_code)

*/

}

void Init_all()

{

LCD12864_initial()//LCD初始化,包含了数码管和LED灯初始化

P7DIR=0x0F //键盘扫描初始化

P7REN=0xF0 //输入上下拉电阻使能,输出上下拉不使能

P7OUT=0xF0//输入上拉

Init_UART()//串口初始化

Init_compa()//比较器初始化

Init_ADC()//ADC初始化

Init_IIC()//IIC初始化

}

void Test_Led()

{

unsigned char i=0

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("1.Test_LED")

for(i<16i++)

{

P8OUT=0xF0|i

Delayms(50)

}

}

void Test_Seg()

{

int i

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("2.Test_SEG")

for(i=0i<500i++)

{

//4,3,2,1

P1OUT&=~0x02

P1OUT|=0x10|0x08|0x04

P5OUT=Seg_Data[9] //清楚数码管显示

Delayms(1)

P1OUT&=~0x04

P1OUT|=0x10|0x08|0x02

P5OUT=Seg_Data[8] //清楚数码管显示

Delayms(1)

P1OUT&=~0x08

P1OUT|=0x10|0x04|0x02

P5OUT=Seg_Data[7] //清楚数码管显示

Delayms(1)

P1OUT&=~0x10

P1OUT|=0x08|0x04|0x02

P5OUT=Seg_Data[6] //清楚数码管显示

Delayms(1)

}

P5OUT=0x00//熄灭所有数码管

}

void Test_Key()

{

unsigned char i=0

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("3.Test_KEY")

LCD12864_gotoXY(2,0) //第2行,第1列显示

LCD12864_sendstr("按键:")

for(i<16i++)

{

Int_char(Get_Keycode())

LCD12864_gotoXY(2,3)

LCD12864_sendstr("")

LCD12864_gotoXY(2,3)

LCD12864_sendstr(Result)

Delayms(100)//防抖

}

}

void Test_Uart()

{

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("4.Test_UART")

LCD12864_gotoXY(2,0) //第2行,第1列显示

}

void Test_Compa()

{

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("5.Test_COMPA")

}

void Test_ADC()

{

int i=0

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("6.Test_ADC")

for(i<200i++)

{

Start_ADC()

Delayms(10)

}

}

void Test_IIC()

{

LCD12864_gotoXY(1,0) //第1行,第1列显示

LCD12864_sendstr("7.Test_IIC")

EEPROM_Write(0x00,0x40,7)// 字节写

Delayms(10)

EEPROM_read(0x00,0x40)

}

void main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD//关闭看门狗

Init_all()

while(1){

Test_Led() //1.测试LED

LCD12864_gotoXY(2,0) //第1行,第1列显示

LCD12864_sendstr("请按16键!")

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

Test_Seg() //2.测试数码管

LCD12864_gotoXY(2,0) //第1行,第1列显示

LCD12864_sendstr("请按16键!")

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

Test_Key() //3.测试按键扫描

LCD12864_gotoXY(2,0) //第1行,第1列显示

LCD12864_sendstr("请按16键!")

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

LCD12864_gotoXY(3,0) //第3行,第1列显示

LCD12864_sendstr("请按16键!")

Test_Uart() //4.测试串口

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

Test_Compa() //5.测试比较器

LCD12864_gotoXY(2,0) //第2行,第1列显示

LCD12864_sendstr("请按16键!")

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

Test_ADC() //6.测试ADC

LCD12864_gotoXY(3,0) //第3行,第1列显示

LCD12864_sendstr("请按16键!")

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

Test_IIC() //7.测试IIC

Delayms(100)

LCD12864_gotoXY(3,0) //第3行,第1列显示

LCD12864_sendstr("测试完成")

while(!(Get_Keycode()==15)) //按下最后一键测试下一个例子

LCD12864_clear()

}

}

要安装什么软件才能看PNG格式的图片?

看图软件都可以看png的图片。png是firework编辑的图层文件,包含了图层信息,可以平面化处理为jpg文件

用什么软件可以绘制PNG格式的图片

Photoshop

png格式的图片在什么软件上编辑

首先在桌面桌面建立一个文件夹用来存放先关文件

选择要修改的png图片,然后右键用画图工具打开

将要修改的图片用画图工具另存为jpg图片

选择另存在桌面上准备好的文件夹中,命名为修改

在文件夹中找到修改.jpg

右键选择打开方式,选择ps

双击背景图层对其进行修改,命名为图层0

对原有图片进行修改

修改完成后,选择文件下拉菜单下的另存为,选择格式为png

点击确定,选择存储位置图片就被存储在桌面

AutoCAD 2010这个软件怎么将JPEG和PNG格式的图片换成DWG格式的图片?

用IAT命令就可以把JPG插入到CAD里面。

png格式的图片

PNG,图像文件存储格式,其目的是试图(原来此处使用了"企图")替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。流式网络图形格式(Portable Neork Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。PNG用来存储灰度图像时,灰度图像的深度可多到16位,存储彩色图像时,彩色图像的深度可多到48位,并且还可存储多到16位的α通道数据。PNG使用从LZ77派生的无损数据压缩算法。 一般应用于JAVA程序中,或网页或S60程序中是因为它压缩比高,生成文件容量小。

PNG文件格式保留GIF文件格式的下列特性:

使用彩色查找表或者叫做调色板可支持256种颜色的彩色图像。

流式读/写性能(streamability)

图像文件格式允许连续读出和写入图像数据,这个特性很适合于在通信过程中生成和显示图像。

逐次逼近显示(progressive display)

这种特性可使在通信链路上传输图像文件的同时就在终端上显示图像,把整个轮廓显示出来之后逐步显示图像的细节,也就是先用低分辨率显示图像,然后逐步提高它的分辨率。

透明性(transparency)

这个性能可使图像中某些部分不显示出来,用来创建一些有特色的图像。

辅助信息(ancillary information)

这个特性可用来在图像文件中存储一些文本注释信息。

独立于计算机软硬件环境。

使用无损压缩。

PNG文件格式中要增加下列GIF文件格式所没有的特性:

每个像素为48位的真彩色图像。

每个像素为16位的灰度图像。

可为灰度图和真彩色图添加α通道。

添加图像的γ信息。

使用循环冗余码(cyclic redundancy code,CRC)检测损害的文件。

加快图像显示的逐次逼近显示方式。

标准的读/写工具包。

可在一个文件中存储多幅图像。

编辑本段

PNG文件的使用:

PNG格式图片因其高保真性、透明性及文件大小较小等特性,被广泛应用于网页设计、平面设计中。网络通讯中因受带宽制约,在保证图片清晰、逼真的前提下,网页中不可能大范围的使用文件较大的bmp、jpg格式文件,gif格式文件虽然文件较小,但其颜色失色严重,差强人意,所以PNG格式文件自诞生之日起就大行其道。

PNG格式图片通常被我们当做素材来使用,在设计过程中,不可避免的要搜索相关文件,如果是JPG格式文件,抠图就在所难免,费时费力,gif格式虽然具有透明性,但其只是对其中一种或几种颜色设置为完全透明,并没有考虑对周围颜色的影响,所以此时PNG格式文件就成了我们的不二之选。我们经常在网页中看到整个页面使用同一个PNG图片做背景,按钮、导航条等全做在一张图片上,其实就是这个道理,究其缘由无非就是PNG图片在下载过程中占带宽较小,而且颜 *** 真,下载一次可重复使用。

编辑本段

文件结构

PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署名(PNG file signature)域和按照特定结构组织的3个以上的数据块(chunk)组成。

PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。

(1) PNG文件署名域

8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:

十进制数 137 80 78 71 13 10 26 10

十六进制数 89 50 4e 47 0d 0a 1a 0a

(2) 数据块的结构

每个数据块都由表6-07所示的的4个域组成。

表6-07 PNG文件数据块的结构

名称 字节数 说明

Length(长度) 4字节 指定数据块中数据域的长度,其长度不超过

(231-1)字节

Chunk Type Code(数据块类型码) 4字节 数据块类型码由ASCII字母(A-Z和a-z)组成

Chunk Data(数据块数据) 可变长度 存储按照Chunk Type Code指定的数据

CRC(循环冗余检测) 4字节 存储用来检测是否有错误的循环冗余码

在表6-07中,CRC(cyclic redundancy check)域中的值是对Chunk Type Code域和Chunk Data域中的数据进行计算得到的。CRC具体算法定义在ISO 3309和ITU-T V.42中,其值按下面的CRC码生成多项式进行计算:

x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

编辑本段

数据块结构

1. 关键数据块

关键数据块中的4个标准数据块是:

(1) 文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。

文件头数据块由13字节组成,它的格式如表6-08所示。

表6-08 PNG文件头键数据块的结构

域的名称 字节数 说明

Width 4 bytes 图像宽度,以像素为单位

Height 4 bytes 图像高度,以像素为单位

Bit depth 1 byte 图像深度:

索引彩色图像:1,2,4或8

灰度图像:1,2,4,8或16

真彩色图像:8或16

ColorType 1 byte 颜色类型:

0:灰度图像, 1,2,4,8或16

2:真彩色图像,8或16

3:索引彩色图像,1,2,4或8 4:带α通道数据的灰度图像,8或16

6:带α通道数据的真彩色图像,8或16

Compression method 1 byte 压缩方法(LZ77派生算法)

Filter method 1 byte 滤波器方法

Interlace method 1 byte 隔行扫描方法: 0:非隔行扫描

1: Adam7(由Adam M. Costello开发的7

遍隔行扫描方法)

(2) 调色板数据块PLTE(palette chunk):它包含有与索引彩色图像((indexed-color image))相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。真彩色的PNG数据流也可以有调色板数据块,目的是便于非真彩色显示程序用它来量化图像数据,从而显示该图像。调色板数据块结构如表6-09所示。

表6-09 调色板数据块结构

域的名称 字节数 说明

Red 1 byte 0 = 黑,255 = 红

Green ">0 = 黑,255 = 绿

Blue 1 byte 0 = 黑,255 = 蓝

调色板实际是一个彩色索引查找表,它的表项数目可以是1~256中的一个数,每个表项有3字节,因此调色板数据块所包含的最大字节数为768。

(3) 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。

(4) 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。

除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。

2. 辅助数据块

PNG文件格式规范制定的10个辅助数据块是:

(1) 背景颜色数据块bKGD(background color)。

(2) 基色和白色度数据块cHRM(primary chromaticities and white point)。所谓白色度是指当R=G=B=最大值时在显示器上产生的白色度。

(3) 图像γ数据块gAMA(image gamma)。

(4) 图像直方图数据块hIST(image histogram)。

(5) 物理像素尺寸数据块pHYs(physical pixel dimensions)。

(6) 样本有效位数据块sBIT(significant bits)。

(7) 文本信息数据块tEXt(textual data)。

(8) 图像最后修改时间数据块tIME (image last-modification time)。

(9) 图像透明数据块tRNS (transparency)。

(10) 压缩文本数据块zTXt (pressed textual data)。

3. 数据块摘要

关键数据块、辅助数据块和专用公共数据块(special-purpose public chunks)综合在表6-10中。

表6-10 PNG文件格式中的数据块

数据块符号 数据块名称 多数据块 可选否 位置限制

IHDR 文件头数据块 否 否 第一块

cHRM 基色和白色点数据块 否 是 在PLTE和IDAT之前

gAMA 图像γ数据块 否 是 在PLTE和IDAT之前

sBIT 样本有效位数据块 否 是 在PLTE和IDAT之前

PLTE 调色板数据块 否 是 在IDAT之前

bKGD 背景颜色数据块 否 是 在PLTE之后IDAT之前

hIST 图像直方图数据块 否 是 在PLTE之后IDAT之前

tRNS 图像透明数据块 否 是 在PLTE之后IDAT之前

oFFs (专用公共数据块) 否 是 在IDAT之前

pHYs 物理像素尺寸数据块 否 是 在IDAT之前

sCAL (专用公共数据块) 否 是 在IDAT之前

IDAT 图像数据块 是 否 与其他IDAT连续

tIME 图像最后修改时间数据块 否 是 无限制

tEXt 文本信息数据块 是 是 无限制

zTXt 压缩文本数据块 是 是 无限制

fRAc (专用公共数据块) 是 是 无限制

gIFg (专用公共数据块) 是 是 无限制

gIFt (专用公共数据块) 是 是 无限制

gIFx (专用公共数据块) 是 是 无限制

IEND 图像结束数据 否 否 最后一个数据块

编辑本段

tEXt和zTXt数据块中的标准关键字:

Title

图像名称或者标题

Author

图像作者名

Description

图像说明

Copyright

版权声明

CreationTime

原图创作时间

Sofare

创作图像使用的软件

Disclaimer

弃权

Warning

图像内容警告

Source

创作图像使用的设备

Comment

各种注释

-----------------------------------------------------------------------------------------

PNG = Papua New Guinea 巴布亚新几内亚 (大洋洲一岛国)

怎么才能把PNG格式的图片改成JPG格式的

用Photoshop可以.

打开PNG格式的图片,另存为JPG格式.

再使用图标工具就可以变为ICO文件了.

Photoshop CS2 v9.0 绿色中文版

:crsky./soft/5594.

这是图标工具,你可以下载:

:crsky./list/s_81_1.

求PNG格式的图片

我空间里有很多。 在PS素材里

哪种看图软件能看png格式的照片

PNG是非常常见的图片文件格式,在win7以后的系统中,甚至不用安装任何软件,系统自带的画笔工具就可以正常打开PNG格式的照片。

除了系统自带的画笔工具,基本所有的看图软件都是支持PNG格式的图片的。

如果遇到打开问题,更大的可能还是照片文件已经损坏了,所以无法打开 。

苹果手机能看PNG格式的图片吗?

可以的。

苹果默认的格式是简单的JPG,JPEG的格式,还有PNG,GIF,BMP,TIFF,WMF,EMF等。

如果复杂的格式,譬如:PSD,CDR,AI,DWG,3DS的格式,这些都需要软件支持的,方可打开。

以上图片格式,最好在电脑里打开,因为这些格式的文件,容量比较大,手机需要安装相应的软件,占用很大的内存。

png格式的图片怎么查看

PNG是矢量图,无论怎么放大都不失真。

PNG其目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。

可移植网络图形格式(Portable Neork Graphic Format,PNG)名称来源于非官方的“PNG's Not GIF”,是一种位图文件(bitmap file)存储格式,读成“ping”。

PNG格式的图片怎样查看:

可以用WINDOWS自带的图片浏览器、 ACDSEE、PHOTOSHOP等软件查看。


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

原文地址:https://www.54852.com/yw/11618005.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存