173 2438 5004
KEROS加密芯片——品牌直销 | 免费样品 | 技术支持
当前位置:网站首页 > 资讯中心 正文 资讯中心

单片机显示jpg格式图片

htxw 2023-03-13 资讯中心 26 ℃

c\c++用于显示jpg格式的代码。 关键代码或函数。

1、如何从BMP图片读取每个像素,然后根据PNG图片的格式以及RGB色彩算法,将BMP像素转换成png图片,最后根据PNG格式输出到文件。

例程:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

FILE *fp = NULL;

char buf[PNG_BYTES_TO_CHECK];

LPSTR lpszFileName = lpszPathName;

if(!lpszFileName) return false;

//打开a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PyuBnvf4uh7BnH0vnjDk0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnWc4nHcvnHc" target="_blank" class="baidu-highlight"PNG文件/a

if(NULL == (fp = fopen(lpszFileName,"rb")))

{

delete []lpszFileName;

lpszFileName = NULL;

return false;

}

//验证是否为a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PyuBnvf4uh7BnH0vnjDk0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnWc4nHcvnHc" target="_blank" class="baidu-highlight"PNG文件/a

if(fread(buf,1,PNG_BYTES_TO_CHECK,fp) != PNG_BYTES_TO_CHECK)

{

fclose(fp);

delete []lpszFileName;

lpszFileName = NULL;

return false;

}

if( 0 != png_sig_cmp((unsigned char*)buf,(png_size_t)0,PNG_BYTES_TO_CHECK))

{

fclose(fp);

delete []lpszFileName;

lpszFileName = NULL;

return false;

}

//以下代码读取a href=";tn=44039180_cprfenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1Y4PyuBnvf4uh7BnH0vnjDk0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnWc4nHcvnHc" target="_blank" class="baidu-highlight"PNG文件/a

png_structp png_ptr = NULL;

png_infop info_ptr = NULL;

unsigned int sig_read = PNG_BYTES_TO_CHECK;

int color_type = 0,interlace_type = 0;

png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);

if( NULL == png_ptr)

{

fclose(fp);

delete []lpszFileName;

lpszFileName = NULL;

return false;

}

info_ptr = png_create_info_struct(png_ptr);

if(NULL == info_ptr)

{

fclose(fp);

png_destroy_read_struct(png_ptr,info_ptr,png_infopp_NULL);

delete []lpszFileName;

lpszFileName = NULL;

return false;

}

png_init_io(png_ptr,fp);

png_set_sig_bytes(png_ptr,sig_read);

png_read_info(png_ptr,info_ptr);

if(info_ptr-bit_depth == 16)png_set_strip_16(png_ptr);

if(info_ptr-color_type == PNG_COLOR_TYPE_GRAY info_ptr-pixel_depth 8)

png_set_gray_1_2_4_to_8(png_ptr);

switch (info_ptr-pixel_depth)

{

case 32:

if (info_ptr-color_type PNG_COLOR_MASK_COLOR)png_set_bgr(png_ptr);

png_set_invert_alpha(png_ptr);

//当为32位图像是应该如何处理,例如

//pDib-CreateDIB(info_ptr-width, info_ptr-height,32);

break;

case 24:

{

png_color_16 my_background={0,255,255,255,0};

png_set_background(png_ptr,my_background,

PNG_BACKGROUND_GAMMA_SCREEN,0,1.0);

if (info_ptr-color_type PNG_COLOR_MASK_COLOR)png_set_bgr(png_ptr);

//当为32位图像是应该如何处理,例如

//pDib-CreateDIB(info_ptr-width, info_ptr-height,24);

}

break;

case 8:

case 4:

//当为32位图像是应该如何处理,例如

//if(info_ptr-num_palette0)

//{

// DWORD *pRQ=new DWORD[info_ptr-num_palette];

// for(int i=0;iinfo_ptr-num_palette;i++)

// {

// pRQ[i]=RGB(info_ptr-palette[i].red,info_ptr-palette[i].green,info_ptr-palette[i].blue);

// }

// pDib-CreateDIB(info_ptr-width, info_ptr-height,info_ptr-pixel_depth,pRQ,info_ptr-num_palette);

// delete[] pRQ;

//}

break;

default:

return false;

}

png_bytepp prow_pointers = new png_bytep[info_ptr-height];

UINT nRowBytes = png_get_rowbytes(png_ptr,info_ptr);

UINT row;

for(row=0;rowinfo_ptr-height;row++)

prow_pointers[row]=new BYTE[nRowBytes];

png_read_image(png_ptr,prow_pointers);

png_read_end(png_ptr,info_ptr);

//拷贝转换后的图像数据

for(row=0;rowinfo_ptr-height;row++)

memcpy(pDib-m_lpImage+(info_ptr-height-row-1)*pDib-m_nByteWidth,

prow_pointers[row],pDib-m_nByteWidth);

2、更简单的方法:用windows自带的图片和传真查看器打开要转换的图片,点击右下角的保存按钮,弹出保存对话框,选择要保存的类型。笔者经实验可转换的类型为gif,bmp,png,jpg.最大的优点是方便且不失。

谁会制作单片机液晶显示器中的显示大头像

这个还不简单……,开始,运行,mspaint,打开你的图片,另存为选bmp格式就完了,改分辨率不就是改大小么,用photoshop改吧,自己摸索一下,很好用的。

要用MSP430单片机将JPG格式的16进制字符串通过GSM模块EM310发送给手机,手机上要求显示图片,怎样实现?

利用单片机技术、带彩信协议GPRS 无线通信模块、图像捕获和图像压缩编码功能模块,实现原理图设计到电路板设计开发。用单片机根据seNSor 控制串口摄像头图像采集和压缩处理,采集图像通过彩信的格式发送到用户手机,同时可以通过短信命令随时查看系统状态,或者摄像头采集图像,监控现场情况。

如果需要具体点的 我把完整文件给你发过去

C语言如何读取jpg格式的图片

有这样一个二进制文件,大小在100M左右,里面存放了多张JPG图片,文件格式如下:

无关数据区

JPG图片数据区

无关数据区

JPG图片数据区

无关数据区

JPG图片数据区

......

已知JPG图片起始标志为:“FF D8 FF E0 00 10 4A”,结束标志为:“FF D9”。

现想把这些JPG图片数据从该文件中读出来,生成一个个单独的图片文件,该如何做呢?

帮你写了个程序, 测试了只含有一个图片信息的文件

int len=0;

int filesn=0;

void ReadJpg(CFile *sfp,const char *dstfile,unsigned char a,unsigned char b)

{

CFile nf;

nf.Open(dstfile,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);

unsigned t=0,t1=0;

nf.Write(a,sizeof(char));

nf.Write(b,sizeof(char));

while(1)

{

sfp-Read(t,sizeof(char));

len++;

nf.Write(t,sizeof(char));

if(t==0xFF)

{

sfp-Read(t1,sizeof(char));

len++;

if(t1==0xD9)

break;

else

nf.Write(t1,sizeof(char));

}

}

nf.Close();

}

调用:

void test()

{

CFile fp;

fp.Open("86b05621.jpg",CFile::modeRead|CFile::typeBinary);//文件名改一下

unsigned char a=0,b=0;

len=0;

while(1)

{

fp.Read(a,sizeof(char));

len++;

if(len=fp.GetLength())

break;

if(a==0xFF)

{

fp.Read(b,sizeof(char));

len++;

if(b==0xD8)

{

filesn++;

char filename[256];

sprintf(filename,"Jpg %d.jpg",filesn);

ReadJpg(fp,filename,a,b);

}

}

}

fp.Close();

}

思路是,先得到FF的值,然后再判断下一位是否是0xD8, 但这里要说明一下,如果你的其它数据信息里也含有FF D8值的话就会出错了, 所以为保险起见,应该再多比较几位, JPG的头是固定的,再往下就是EF E0 00 1E, 建议楼主再往下比较四位比较保险(在程序中稍作修改即可)

你是不是在 分析某个 游戏的或程序的资源文件呀,如果是的话,这个资源文件应该配有一个 索引文件!或在其文件自身。索引可以列表索引,链表形示……

如果是你自已生成的文件包,最好加上索引,因为这样可以提高效率!

请教高手,用单片机做的Web服务器,如何在网页上显示静态图片?求参考!

楼主还不了解HTTP协议,HTML代码及其他资源都不是一次发请求的,先请求HTML,服务返回类型为text/html 然后浏览器分析HTML代码 如果存在其他资源 比如图片的话 然后再去请求图片 服务求收到请求 然后 返回图片数据 HEAD类型就是 image/jpg 或者 image/gif image/png 之类,总之,客户端请求什么 服务器返回相应类型的内容就行了

stm32显示jpg图片可以用图片取模工具获得数组直接显示吗,但是我失败了,不知道是什么原因,求解

有以下几个原因:

1:图像的尺寸与程序中显示的范围不一致。例如图像原本是20*10的,而程序图像显示范围中却错误地设为30*10,显示出来的东西就会乱。

2:取模时候的取模顺序要与显示时候的显示顺序相一致。例如取模时候是水平、自上而下取的,显示时候也要设为水平、自上而下显示出每个像素。这个至关重要,一般都是这个设错了所以会乱码。

3:液晶屏一般以16位二进制数表示一个像数的颜色,例如蓝色是0xFF00。而取模软件取模后,数据一般存放在一个char型的数组里,这样一个像素的颜色被拆成两半放在数组的两个元素中,如const char xxx[]={0xFF,0x00},这时候用户要自己把它合成一个16位的数据,这时候用户就要注意高低位数据的顺序了,不要合成0x00FF,这样图像出来后就会乱。

单片机显示jpg格式图片的介绍到此就结束了,感谢您耐心阅读,谢谢。

本文标签:单片机显示jpg格式图片

<