linux显卡驱动如何使用16bpp

linux显卡驱动如何使用16bpp,第1张

使用官方的NVIDIA驱动进行手动安装。

打开NVIDIA驱动官网,选择最新的一个驱动程序,下载。

选择好显卡驱动后,选最新的一个驱动程序并下载。

卸载旧驱动,禁用nouveau驱动,更新Linux系统内核,重启安装

LINUX常见问题20个

一、 如何建立多用户

提醒大家一句,别一直使用root用户,因为root用户在系统中有着至高无上的权力,一不小心就可能破坏系统。比如我们想删除/temp目录下的文件却将命令不小心输成“rm / temp(在‘/’后多了一个空格)”,那么就极可能删去根目录下的所有文件。再者,“Linux是一个真正意义上的多任务、多用户系统”,不体会一下Linux的特色岂不可惜。为了方便自己和别人使用,就在Linux系统下多建几个用户吧。

输入“adduser newuser”,回车,屏幕对命令没有一点儿反应,错啦?不,实际上,系统已接受了新用户。你应该接着输入命令 “passwd newuser”,屏幕将提示输入口令,再次输入确认, 一个新的用户就增加成功,真简单。马上登录试一试吧。

Linux提供了六个虚拟控制台,用ALT+F1~F6切换(在X-window下用CRTL+ALT+F1~F6切换),每个控制台均可以用不同的用户登录,运行不同的程序。赶快为家人和朋友建个用户吧。

二、在Linx命令行下依次运行:

cd/

tar xzvf rmp-2.3.11.tar.gz

cd rpm-2.3.11

./configure

make

make install

mkdir /var/local /var/local/lib /var/local/lib/rpm /var/lib/rpm

这样,你就完成了RPM的安装,以后便可以在网上或光盘上寻找软件的RPM安装版。然后使用RPM进行安装,RPM的使用方法很简单:

1. 用RPM安装软件包 :rpm -ivh 软件文件名

例如 rpm -ivh fvwm95-2.0.43a.chinese-1.i386.rpm 屏幕上就会输出该软件包的名称和安装的进度条:

fvwm95 ###############

当进度条走到底,中文fvwm95(一种X-Window的界面)就安装完了,再运行X-Window,啊,全中文的fvwm95就在我的眼前。

2. 用RPM反安装软件包:rpm -e 软件名

例如:rpm -e fvwm95

3. 用RPM升级软件包:rpm -Uvh 软件升级版文件名

例如:rpm -Uvh fvwm95-2.1.0a.chinese-1.i386.rpm,RPM自动反安装原来的老版本,将升级版的软件安装入系统。怎么样,不难吧!

三、如何安装Linux的应用软件

对于普通用户,安装或升级软件可以用Red Hat公司的软件包安装与管理工具RPM。使用后你就可以轻松安装软件、升级软件和卸载软件并查询软件信息。

如果你安装的是Red Hat Linux,那么你就可以使用RPM了,如果不是,你可以先安装RPM。方法如下:

1. 下载RPM软件包: ftp://ftp.redhat.com/pub/code/rpm/rpm-2.3.11.tar.gz

四 、如何在Windows系统中查看Linux的文件

通过使用装载命令mount,我们能够在Linux中轻松地查阅、使用Windows的文件。俗话说有来有往嘛,我们当然也希望在Windows中能看到Linux的文件。可是Windows可不像Linux那么友好,并未备有与Linux沟通的工具,怎么办呢?别急,网络上有个小工具叫Linuxdos,不到500K,运行在Windows下,专用于查看Linux的文件。运行之后,你可以选择驱动器,然后它就像资源管理器一样列出Linux的文件系统。

五、如何汉化Linux

Linux的母语是英文,所以满屏幕都是“英国老鼠”,用起来特不方便,如果想输入中文更没辙。不过现在的中国软件人员可谓人才辈出,已经为Linux的汉化提供了全面的解决方案。

1.中文模拟终端chdrv

首先,总得让Linux能显示中文吧!chdrv是在命令行下的中文模拟终端,也就是说,只要你装上了它,你就可以在Linux的命令行状态下显示和输入汉字了。chdrv启动后在tty7(用Ctrl+Alt+F7)建立一个虚拟终端,用户在tty7上登录后就可以使用它提供的中文支持。tty1到tty6不会受到它的影响。

如果你能找到RPM格式的安装包,就可以轻松地使用RPM安装程序安装它。否则你可以到ftp://ftp.ihep.ac.cn/pub/chinese/system分别取得 chdrv 的已编译的chdrvbin-0.23.gb.tar.gz和字体文件chdrvfont.tar.gz。然后用root登录,依次执行以下命令:

tar xvzf chdrvbin-0.23.gb.tar.gz 将编译好的chdrv解压到chdrv-0.23.gb目录

mv chdrvfont.tar.gz chdrv-0.23.gb/ 将字体文件移到chdrv-0.23.gb目录

cd chdrv-0.23.gb 进入此目录

./installbin 运行安装文件

2.中文输入服务器xcin

如果你常在X-Window中使用Linux,一定试试用XCIN来解决中文输入的问题。XCIN 是Xwindow Chinese INput的缩写,是一个在X-Window模式下运行的中文输入系统,安装它后,X-Window的所有终端都将提供中文服务。

你可从ftp://ftp.ihep.ac.cn/pub/chinese/system/xcingb-2.2.tar.gz取得GB码版的XCIN文件包。然后

用root登录,依次执行以下命令:

tar xzvf xcingb-2.2.tar.gz  解压缩

cd xcingb-2.2 进入目录

./configure  修改安装选项

make 编译

make install  安装

同样,如果你能找到该软件的RPM安装版,可以用RPM来安装。

到此为止,我们已经介绍了在命令行下和X-Window中使用中文的方法。可是在文本编辑软件中依然只能显示中文,却无法输入汉字。要解决这个问题必须自己动手修改两个地方:

1) 为不同shell设置

若使用Bash Shell:在 /etc/profile 增加下面的内容:

stty cs8 -istrip

stty pass8

export LANG=C

export LC_CTYPE=iso-8859-1

若使用Tcsh Shell:在 /etc/csh.login 或 /etc/csh.cshrc 增加设定如下:

stty cs8 -istrip

stty pass8

setenv LANG C

setenv LC_CTYPE iso-8859-1

2) 在自己主目录下的.inputrc文件中增加下面的内容:

set convert-meta off

set output-meta on

3.中文的窗口管理器 C-fvwm95

fvwm95就像是Linux英文Win95,中国的Linux用户一直期望有一天能在中文的窗口下使用Linux。这一愿望现在终于成为现实。中国科学院高能物理研究所计算中心的于明俭先生将fvwm95作了汉化,我们终于可以将fvwm95上那些讨厌的英文换成汉字了!大家可以到ftp.ihep.ac.cn/pub/chinese/packages/中下载汉化了的fvwm95的源代码。它所用的字库也可以在ftp.ihep.ac.cn/pub/chinese/fonts/pcf/中取得。下载文件中附带了安装说明。

4.下载BluePoint Linux Star Preview(蓝点预览版)

蓝点预览版基于Red Hat,内含:中文内核(kernel)控制台中文显示/输入中文Xserver(CXWIN 0.6),X的中文显示/输入汉化Message和相应库文件,经过中文化和本地化处理的NLS message和库文件。

a. 中文内核

1. 性能卓越, 内核实现中文支持,占用资源极少,速度极快.

2. 多语言支持, 同屏显示多内码(GB/BIG5).

3. 兼容性极好,内核兼容上层应用程序,最彻底的解决办法.

4. 支持高分辨率, 完全取决与用户自己的硬件限制.

5. 支持各种字体,支持简繁字体共14种.

6. 热键切换语言环境(GB/BIG5/EN).

b. 中文Xserver

1. 兼容性好,至少95%的纯西文应用软件可以支持中文处理.

2. 内置输入和显示支持,使用非常方便,无须另外安装输入模块.

3. TTF字库支持.

4. 支持GB/BIG5内码.

c. 汉化Message和相应库文件

1. 提示中文化,开机、关机和常用软件的消息提示全部中文显示。

如果需要安装中文xwindow和输入法,则需要下载star-cxwin.tar.gz. 如果需要安装中文控制台及语言环境, 则需要下载star-zhcon.tar.gz 如果需要在控制台上使用24点阵汉字库, 请下载star-font24.tar.gz 注意:别忘了下载Install安装脚本! 在安装前请仔细阅读README和 常见问题问答!

安装方法

1) 创建一个目录, 将所有下载来的文件放在里面.

2) 以root身份执行安装脚本: # bash Install

3) 安装脚本会先检查系统的配置,还会自动搜索TTF字库, 接下来就是对旧配置文件 进行备份, 最后

开始安装.

4) 完成安装, 如果安装了中文控制台环境, 则需要重新启动.

六、如何设置声卡

不用我说,这可是十分要紧的工作!不过如果你安装了RED HAT Linux,则这项工作就简单了!

用root登录系统,运行/usr/sbin/sndconfig。出现选择声卡类型的画面。一般声卡可以选取Sound Blaster 。

选完声卡后再设置有关的资源。用TAB键结合方向键作出选择后,按OK,如果听到Linus(Linux的创始人)说话的声音,就说明声卡设置成功了。真像老式DOS游戏的声卡设置……

七、如何设置显卡

要设置好你的显卡,首先,要知道你的显卡的型号,是什么公司出的,什么样的类型的显卡,显存有几MB,还要知道显卡的显示芯片是什么类型的,是ALG2302的.,还是SIS6326的,还是Savage3D的,等然后,在超级用户的权限下,你可以运行界面比较友好的Xconfigurator工具,这里的X记住一定要大写的,一步一步跟着指导来选择,应该不是很难的,当选择你的显卡的芯片的时钟时,不用选择它,让测试程序自动检查最后,

还要知道你的显示器的类型,是VGA的,还是SVGA的,以及水平和垂直分辩率。你还可以运行界面不友好的xfree86,如果你比较精通Linux的话,用xfree86命令配置的X Windows效果比Xconfigurator好很多的。界面最友好的,当属XF86Setup工具,若你有安装这个工具的话,不妨就用这个工具来设置你的显卡吧。

八、如何设置网卡

九、如何播放CD音乐

声卡设置好了,可以在光驱中插入一张CD,用装载命令mount将光盘载入,然后输入cdp命令就可以播放了。在屏幕上可以看到CD的音轨清单,小键盘的9是播放,7是停止,6进到下一音轨,4退到前一音轨,0退出播放程序,2d出CD,8是暂停。如果是在X-Window中,可以用xplaycd播放CD,这是一个有图形界面的播放器,按钮及功能一目了然,这里就不多说了。

10、如何播放VCD影碟

11、如何拨号上网

12、Linux下能玩游戏吗

光盘中有bsd-games-2.1-3.src.rpm文件包,用RPM命令进行安装,然后到安装目录中去找游戏吧。不过这些游戏都不够精致,如果你想玩好的,就须要进入X-Window,acm是空战模拟游戏,paradise和xpilot是联网战斗游戏,xdemineur是挖地雷(没想到吧),xjewel是俄罗斯方块,xboard是国际象棋,xpat2是扑克牌游戏,xboing是d珠台游戏,还有Doom——大名鼎鼎的第一人称射击游戏!这些游戏有的可以直接调出,有的须要用RPM命令安装。所有的RPM包都在安装光盘中的srpms目录下,自己去看看吧。

十、用xvidtune调整你的显示器

大家会发现装了linux之后在windows下用的好好的显示器有时进到linux的xwindows里后就歪掉了,调整好之后回到windows后windows的桌面也外调了,来回启动系统每次都要调整很麻烦的,这里介绍一个办法一劳永逸j进入linux启动x在xterm里执行xvidtune,会d出这个软件的窗口,点Auto然后点Left,Right等按钮调整你的显示器到最佳的位置,然后点界面上的Show按钮会得到类似这样的输出:

"1152x864" 121.50 1152 1232 1360 1568 864 865 868 911 +hsync -vsync

然后退出这个软件,修改你的/etc/X11/XF86Config-4文件在

Section "Monitor"

Identifier "AS 786T"

VendorName "Unknown"

ModelName "Unknown"

HorizSync 30 - 87

VertRefresh 50 - 160

Option "dpms"

EndSection

里加上刚才的输出,我的是:

Section "Monitor"

Identifier "AS 786T"

VendorName "Unknown"

ModelName "Unknown"

HorizSync 30 - 87

VertRefresh 50 - 160

Modeline "1152x864" 121.50 1152 1232 1360 1568 864 865 868 911 +hsync -vsync

Option "dpms"

EndSection

保存然后重起试试看吧

十一、问:我的机器是windows和linux双系统,如何改变grub默认启动的系统?

答:这需要修改/boot/grub/grub.conf。举一个例子你就明白了。假设你的/boot/grub/grub.conf是这样子的:

default=0

timeout=10

splashimage=(hd0,7)/grub/splash.xpm.gz

title Red Hat Linux (2.4.18-14)

root (hd0,7)

kernel /vmlinuz-2.4.18-14 ro root=LABEL=/

initrd /initrd-2.4.18-14.img

title DOS

rootnoverify (hd0,0)

chainloader +?? 牴 ???? ?1

那么你的grub会默认启动Red Hat Linux (2.4.18-14)这个系统,把default=0改成default=1,那么grub会默认启动DOS这个系统。注意,这里的要点是:你想默认启动第n个title所指的系统,那么default应该是等于n-1

十二、问:我的文本控制台怎么总是出现乱码呢?

答:这是因为你安装了中文支持的缘故。解决的方法是安装一个zhcon(一个快速地外挂式CJK(中文/日文/韩文)的多内码平台),我把他放在附件中提供大家下载。关于zhcon的更进一步的消息,大家可以到他的官方主页zhcon.gnuchina.org查看。安装和使用请参考这个连接http://hepg.sdu.edu.cn/Service/tips/zhcon_manual.html

zhcon下载连接:http://zhcon.gnuchina.org/download/...on-0.2.1.tar.gz

十三、问:我在安装一个软件的时候,提示我缺少一个.so文件,安装无法继续,怎么办?

答:.so文件就像windows中的.dll文件一样,是库文件。一个程序的正常安装和运行需要特定的库文件的支持。所以你需要去找到包含这个.so的包装上。去www.rpmfind.net用你缺的那个.so文件?rpm包

十四、我访问windows分区时发现所有windows分区中的文件和文件夹名中的中文全变成问号,怎么办?

答:在第三贴中我们讲解了通过编辑/etc/fstab实现在linux中访问windows的fat32分区。同样,我们可以通过进一步修改/etc/fstab来实现中文文件名显示。只要把/dev/hda1 /mnt/c vfat default 0 0中的default全改为iocharset=cp936就行了。

十五、我的rh8.0中的XMMS不好使,不能播放MP3,怎么办?

答:这是因为rh公司怕别人告他侵权,所以在rh8.0中去掉了XMMS对MP3的支持,8.0以前的版本都是好使的。

在8.0中要解决也很简单,装一个插件就行了。这个插件我放在本贴的附件里,rpm格式,经winrar压缩

附件: http://www.chinalinuxpub.com/vbbfor...s=&postid=86299

十六、问:我在linux中怎样才能使用windows分区呢?

答:先说一点背景知识 。linux支持很多种文件系统,包括windows的fat32和ntfs。对fat32的支持已经很好,可以直接使用,而对ntfs的支持还不是太好,只能读,而写是极危险的,并且对ntfs的支持不是默认的,也就是说你想要使用ntfs的话,需要重新编译内核。鉴于重编内核对于新手的复杂性,这里只讲解使用fat32分区的方法 下面给出上述问题的两种解决方案:1.在安装系统(linux),进行到分区选择挂载点时,你可以建立几个挂载点,如/mnt/c,/mnt/d等,然后选择你的windows fat32分区,把它们分别挂载到前面建立的挂载点即可。(注意,正如前面所说,在这里你不能把一个ntfs分区挂载到一个挂载点,应为ntfs不是默认支持的。)这样你装好系统后就能直接使用你的windows fat32分区了。例如,你把windows的c盘(linux中的/dev/hda1)挂载到/mnt/c,那么你就能在/mnt/c目录中找到你的c盘中的全部数据。2. 如果你在安装系统时没有像方案1所说的那样挂载上你的fat32分区,没关系,仍然能够很方便的解决这个问题。首先,用一个文本编辑器(如vi)打开/etc/fstab,在文件的最后加入类似如下的几行/dev/hda1 /mnt/c vfat default 0 0你所要做的修改就是,把/dev/hda1改成你要挂载的fat32分区在linux中的设备号,把/mnt/c改成相应的挂载点即可。注意,挂载点就是一个目录,这个目录要事先建立。举一个例子,我有三个fat32分区,在windows中是c,d,e盘,在linux中的设备号分别为/dev/hda1,/dev/hda5,/dev/hda6。那么我就要先建立3个挂载点,如/mnt/c,/mnt/d,/mnt/e,然后在/etc/fstab中加上这么几行:

/dev/hda1 /mnt/c vfat default 0 0

/dev/hda5 /mnt/d vfat default 0 0

/dev/hda6 /mnt/e vfat default 0 0

保存一下退出编辑器。这样以后你重启?? 牴 ???? ?机器后就能直接使用c,d,e这三个fat32格式的windows分区了

十七、问:我的机器重装windows后,开机启动就直接进入了windows,原来的linux进不去了,怎么办?

答:这是由于windows的霸道。重装windows后,windows重写了你的mbr,覆盖掉了grub。解决方法

很简单:用你的linux第一张安装盘引导进入linx rescue模式(如何进入?你注意一下系统的提示信息

就知道了),执行下面两条命令就可以了chroot /mnt/sysimage #改变你的根目录grub-install /dev/hda #安装grub到mbr

十八、问:我的linux开机直接进入文本界面,怎样才能让它默认进入图形界面?

答:修改/etc/inittab文件,其中有一行id:3:initdefault,意思是说开机默认进入运行级别3(多用户的文本界面),把它改成id:5:initdefault,既开机默认进入运行级别5(多用户的图形界面)。这样就行了。

十九、如何同时启动多个x

以前的帖子,估计很多人没看过,贴出来温习一下Linux里的X-Windows以其独特的面貌和强大的功能吸引了很多原先对linux不感兴趣的人,特别是KDE和GNOME,功能强大不说,而且自带了很多很棒的软件,界面非常友好,很适合于初学者。

下面告诉大家一个同时启动6个X的小技巧:

在~/.bashrc中加入 以下几行:

alias X=startx -- -bpp 32 -quiet&

alias X1=startx -- :1 -bpp 32 -quiet&

alias X2=startx -- :2 -bpp 32 -quiet&

alias X3=startx -- :3 -bpp 32 -quiet&

alias X4=startx -- :4 -bpp 32 -quiet&

alias X5=startx -- :5 -bpp 32 -quiet&

其中32是显示器的色彩深度,你应该根据自己的实际情况设置。

之后运行

# bash

使改变生效,以后只要依次运行X,X1,X2,X3,X4,X5就可以启动6个X-Windows了。

二十、装了rpm的postgresql之后启动

/etc/init.d/postgresql start是不能启动postgresql的tcp/ip连接支持的,所以打/etc/init.d/postgresql这个文件把su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -D   $PGDATA -p /usr/bin/postmaster start >/dev/null2>&1" </dev/null改为:

su -l postgres -s /bin/sh -c "/usr/bin/pg_ctl -o -o -F -i -w -D   $PGDATA - /usr/bin/postmaster start >/dev/null2>&1" </dev/null

这样就可以启动数据库的tcp/ip链接了

1) 在LCD上显示BMP或JPEG图片的主流程图

首先,在程序开始前。要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0。命令如下:

mknod fb0 c 29 0

在LCD上显示图象的主流程图如图1所示。程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图形文件数据,把图象的RGB值映射到显存中,这部分是图象显示的核心。对于JPEG格式的图片,要先经过JPEG解码才能得到RGB数据,本项目中直接才用现成的JPEG库进行解码。对于bmp格式的图片,则可以直接从文件里面提取其RGB数据。要从一个bmp文件里面把图片数据阵列提取出来,首先必须知道bmp文件的格式。下面来详细介绍bmp文件的格式。

图1

2) bmp位图格式分析

位图文件可看成由四个部分组成:位图文件头、位图信息头、彩色表和定义位图的字节阵列。如图2所示。

图2

文件头中各个段的地址及其内容如图3。

图3

位图文件头数据结构包含BMP图象文件的类型,显示内容等信息。它的数据结构如下定义:

Typedef struct

{

int bfType;//表明位图文件的类型,必须为BM

long bfSize;//表明位图文件的大小,以字节为单位

int bfReserved1;//属于保留字,必须为本0

int bfReserved2;//也是保留字,必须为本0

long bfOffBits;//位图阵列的起始位置,以字节为单位

} BITMAPFILEHEADER;

2.1)信息头中各个段的地址及其内容如图4所示。

图4

位图信息头的数据结构包含了有关BMP图象的宽,高,压缩方法等信息,它的C语言数据结构如下:

Typedef struct {

long biSize; //指出本数据结构所需要的字节数

long biWidth;//以象素为单位,给出BMP图象的宽度

long biHeight;//以象素为单位,给出BMP图象的高度

intbiPlanes;//输出设备的位平面数,必须置为1

intbiBitCount;//给出每个象素的位数

long biCompress;//给出位图的压缩类型

long biSizeImage;//给出图象字节数的多少

long biXPelsPerMeter;//图像的水平分辨率

long biYPelsPerMeter;//图象的垂直分辨率

long biClrUsed;//调色板中图象实际使用的颜色素数

long biClrImportant;//给出重要颜色的索引值

} BITMAPINFOHEADER;

2.2)对于象素小于或等于16位的图片,都有一个颜色表用来给图象数据阵列提供颜色索引,其中的每块数据都以B、G、R的顺序排列,还有一个是reserved保留位。而在图形数据区域存放的是各个象素点的索引值。它的C语言结构如图5所示。

图5 颜色表数据结构

2.3)对于24位和32位的图片,没有彩色表,他在图象数据区里直接存放图片的RGB数据,其中的每个象素点的数据都以B、G、R的顺序排列。每个象素点的数据结构如图6所示。

图6 图象数据阵列的数据结构

2.4)由于图象数据阵列中的数据是从图片的最后一行开始往上存放的,因此在显示图象时,是从图象的左下角开始逐行扫描图象,即从左到右,从下到上。

2.5)对S3C2410或PXA255开发板上的LCD来说,他们每个象素点所占的位数为16位,这16位按B:G:R=5:6:5的方式分,其中B在最高位,R在最低位。而从bmp图象得到的R、G、B数据则每个数据占8位,合起来一共24位,因此需要对该R、G、B数据进行移位组合成一个16位的数据。移位方法如下:

b >>= 3g >>= 2r >>= 3

RGBValue = ( r<<11 | g <<5 | b)

基于以上分析,提取各种类型的bmp图象的流程如图7所示

图7

3) 实现显示任意大小的图片

开发板上的LCD屏的大小是固定的,S3C2410上的LCD为:240*320,PXA255上的为:640*480。比屏幕小的图片在屏上显示当然没问题,但是如果图片比屏幕大呢?这就要求我们通过某种算法对图片进行缩放。

缩放的基本思想是将图片分成若干个方块,对每个方块中的R、G、B数据进行取平均,得到一个新的R、G、B值,这个值就作为该方块在LCD屏幕上的映射。

缩放的算法描述如下:

(1)、计算图片大小与LCD屏大小的比例,以及方块的大小。为了适应各种屏幕大小,这里并不直接给lcd_width和lcd_height赋值为240和320。而是调用标准的接口来获取有关屏幕的参数。具体如下:

// Get variable screen information

if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {

printf("Error reading variable information. ")

exit(3)

}

unsigned int lcd_width=vinfo.xres

unsigned int lcd_height=vinfo.yres

计算比例:

widthScale=bmpi->width/lcd_width

heightScale=bmpi->height/lcd_height

本程序中方块的大小以如下的方式确定:

unsigned int paneWidth=

unsigned int paneHeight=

符号 代表向上取整。

(2)、从图片的左上角开始,以(i* widthScale,j* heightScale)位起始点,以宽paneWidth 高paneHeight为一个小方块,对该方块的R、G、B数值分别取平均,得到映射点的R、G、B值,把该点作为要在LCD上显示的第(i , j)点存储起来。

这部分的程序如下:

//-------------取平均--------

for( i=0i<now_heighti++)

{

for(j=0j<now_widthj++)

{

color_sum_r=0

color_sum_g=0

color_sum_b=0

for(m=i*heightScalem<i*heightScale+paneHeightm++)

{

for(n=j*widthScalen<j*widthScale+paneWidthn++)

{

color_sum_r+=pointvalue[m][n].r

color_sum_g+=pointvalue[m][n].g

color_sum_b+=pointvalue[m][n].b

}

}

RGBvalue_256->r=div_round(color_sum_r,paneHeight*paneWidth)

RGBvalue_256->g=div_round(color_sum_g,paneHeight*paneWidth)

RGBvalue_256->b=div_round(color_sum_b,paneHeight*paneWidth)

}

}

4) 图片数据提取及显示的总流程

通过以上的分析,整个图片数据提取及显示的总流程如图8 所示。

图 8

图像显示应用程序:

#include <errno.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <sys/ioctl.h>

#include <unistd.h>

#include <stdint.h>

#include <stdio.h>

#include <stdlib.h>

#include <asm/types.h>

#include <linux/videodev2.h>

#include <sys/mman.h>

#include <string.h>

#include <malloc.h>

#include <linux/fb.h>

#include <jpeglib.h>

#include <jerror.h>

struct fb_dev

{

//for frame buffer

int fb

void *fb_mem //frame buffer mmap

int fb_width, fb_height, fb_line_len, fb_size

int fb_bpp

} fbdev

//得到framebuffer的长、宽和位宽,成功则返回0,失败返回-1

int fb_stat(int fd)

{

struct fb_fix_screeninfo fb_finfo

struct fb_var_screeninfo fb_vinfo

if (ioctl(fd, FBIOGET_FSCREENINFO, &fb_finfo))

{

perror(__func__)

return (-1)

}

if (ioctl(fd, FBIOGET_VSCREENINFO, &fb_vinfo))

{

perror(__func__)

return (-1)

}

fbdev.fb_width = fb_vinfo.xres

fbdev.fb_height = fb_vinfo.yres

fbdev.fb_bpp = fb_vinfo.bits_per_pixel

fbdev.fb_line_len = fb_finfo.line_length

fbdev.fb_size = fb_finfo.smem_len

return (0)

}

//转换RGB888为RGB565(因为当前LCD是采用的RGB565显示的)

unsigned short RGB888toRGB565(unsigned char red, unsigned char green, unsigned char blue)

{

unsigned short B = (blue >>3) &0x001F

unsigned short G = ((green >>2) <<5) &0x07E0

unsigned short R = ((red >>3) <<11) &0xF800

return (unsigned short) (R | G | B)

}

//释放framebuffer的映射

int fb_munmap(void *start, size_t length)

{

return (munmap(start, length))

}

//显示一个像素点的图像到framebuffer上

int fb_pixel(void *fbmem, int width, int height, int x, int y, unsigned short color)

{

if ((x >width) || (y >height))

return (-1)

unsigned short *dst = ((unsigned short *) fbmem + y * width + x)

*dst = color

return 0

}

int main(int argc, char **argv)

{

int fb

FILE *infile

struct jpeg_decompress_struct cinfo

int x,y

unsigned char *buffer

char s[15]

struct jpeg_error_mgr jerr

if ((fb = open("/dev/fb0", O_RDWR)) <0)//打开显卡设备

{

perror(__func__)

return (-1)

}

//获取framebuffer的状态

fb_stat(fb) //获取显卡驱动中的长、宽和显示位宽

printf("frame buffer: %dx%d, %dbpp, 0x%xbyte= %d\n",

fbdev.fb_width, fbdev.fb_height, fbdev.fb_bpp, fbdev.fb_size, fbdev.fb_size)

//映射framebuffer的地址

fbdev.fb_mem = mmap (NULL, fbdev.fb_size, PROT_READ|PROT_WRITE,MAP_SHARED,fb,0)

if ((infile = fopen("lcd.jpg", "rb")) == NULL)

{

fprintf(stderr, "open %s failed\n", s)

exit(-1)

}

ioctl(fb, FBIOBLANK,0) //打开LCD背光

cinfo.err = jpeg_std_error(&jerr)

jpeg_create_decompress(&cinfo)

//导入要解压的Jpeg文件infile

jpeg_stdio_src(&cinfo, infile)

//读取jpeg文件的文件头

jpeg_read_header(&cinfo, TRUE)

//开始解压Jpeg文件,解压后将分配给scanline缓冲区,

jpeg_start_decompress(&cinfo)

buffer = (unsigned char *) malloc(cinfo.output_width

* cinfo.output_components)

y = 0

while (cinfo.output_scanline <cinfo.output_height)

{

jpeg_read_scanlines(&cinfo, &buffer, 1)

if(fbdev.fb_bpp == 16)

{

unsigned short color

for (x = 0x <cinfo.output_widthx++)

{

color = RGB888toRGB565(buffer[x * 3],

buffer[x * 3 + 1], buffer[x * 3 + 2])

fb_pixel(fbdev.fb_mem, fbdev.fb_width, fbdev.fb_height, x, y, color)

}

}

else if(fbdev.fb_bpp == 24)

{

memcpy((unsigned char *)fbdev.fb_mem + y * fbdev.fb_width * 3, buffer,

cinfo.output_width * cinfo.output_components)

}

y++

}

//完成Jpeg解码,释放Jpeg文件

jpeg_finish_decompress(&cinfo)

jpeg_destroy_decompress(&cinfo)

//释放帧缓冲区

free(buffer)

//关闭Jpeg输入文件

fclose(infile)

fb_munmap(fbdev.fb_mem, fbdev.fb_size)//释放framebuffer映射

close(fb)

}

文章是我转载的http://blog.chinaunix.net/uid-25120309-id-3794265.html

但是测试发现编译无法通过,

报错:

LCD.C:(.text+0x384): undefined reference to `jpeg_std_error(jpeg_error_mgr*)'

LCD.C:(.text+0x3a0): undefined reference to `jpeg_CreateDecompress(jpeg_decompress_struct*, int, unsigned int)'

LCD.C:(.text+0x3b0): undefined reference to `jpeg_stdio_src(jpeg_decompress_struct*, _IO_FILE*)'

LCD.C:(.text+0x3c0): undefined reference to `jpeg_read_header(jpeg_decompress_struct*, int)'

LCD.C:(.text+0x3cc): undefined reference to `jpeg_start_decompress(jpeg_decompress_struct*)'

LCD.C:(.text+0x410): undefined reference to `jpeg_read_scanlines(jpeg_decompress_struct*, unsigned char**, unsigned int)'

LCD.C:(.text+0x59c): undefined reference to `jpeg_finish_decompress(jpeg_decompress_struct*)'

LCD.C:(.text+0x5a8): undefined reference to `jpeg_destroy_decompress(jpeg_decompress_struct*)'

collect2: ld returned 1 exit status

经过在网上查找,确定是JPEG解码库问题,我首先在Ubuntu安装了jpeg库

libjpeg 库的安装

在源文件里将

#include <jpeglib.h>

改成

extern "C" {

#include <jpeglib.h>

}

这里是有问题的,注意gcc 会把LCD.C当成c++编译,而把LCD.c当成C语言编译,改成lcd.c后就没有上边红色部分错误

由于是有的是JPEG解码库,链接的时候需要加上-ljpeg 选项

使用命令 arm-linux-gcc -ljpeg LCD.C -o LCD #add -ljpeg option 编译源文件成功,

文章知识点与官方知识档案匹配

CS入门技能树Linux入门初识Linux

23099 人正在系统学习中

点击阅读全文

打开CSDN,阅读体验更佳

开发板lcd上显示图片

#include #include #include "lcd.h" #include "regs.h" extern const unsigned char gImage_6[261120]//extern const unsigned char gImage_5[261120]extern const unsigned char gImage_a[83784]extern const unsigned char test[]static unsigned short drawb[272][480]//it is a public draw area unsigned char mask[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}unsigned char mat[]={0x00,0x00,0x10,0x38, 0x6c,0xc6,0xfe,0xc6, 0xc6,0xc6,0xc6,0x00, 0x00,0x00,0x00,0x00 }

lcd屏幕显示bmp、jpg图片

文章目录BMP图片显示:jpeg压缩过程 RGB: ARGB 32bit 4Byte A:【24-31】 R:【16-23】 G:【8-15】 B:【0-7】 图片显示 显示思路: (1)打开液晶屏(open),进行内存映射(mmap) (2)打开图片,读取颜色数据 (3)将读取到的颜色数据映射到液晶屏 (4)关闭图片文件,液晶屏,解除内存映射 BMP图片显示: 没有经过压缩的二进制位图文件,文件较大,获取颜色数据方便 一张800*480的bmp格式的图片 8004803 = 1152000Byt

继续访问

最新发布 【正点原子I.MX6U-MINI应用篇】6、嵌入式Linux在LCD屏幕上显示字符

嵌入式Linux在LCD屏幕上显示字符

继续访问

数码相框(十六、LCD显示JPG格式图片)

注:本人已购买韦东山老师第三期项目视频,内容来源《数码相框项目视频》,只用于学习记录,如有侵权,请联系删除。 1. LCD 如何显示一张图片? 假如下图是是我们的 JZ2440 开发板,它有一个块显存、LCD控制器、LCD显示屏,LCD是如何显示张图片的呢? 如上图所示: ① 图片的颜色数据存放在显存,LCD 控制器会自动从显存取出图片的一个个颜色数据发送给LCD,取到最后又从头开始的循环取数据,最终把一张图片的全部颜色数据发送到LCD上,从而在LCD显示出该图片; ② 显存存放的数据是RGB数据;.

继续访问

linux滚动屏幕,基于MIDP1.0实现屏幕滚动(转)

本例介绍了一个常用的编程技巧,就是如何基于MIDP1.0实现屏幕的滚动效果。在MIDP2.0可以借助LayerManager的的“可视窗口”来实现。MIDP1.0通过变化坐标系来实现屏幕的滚动效果,只要借助Graphics.translate()方法。package com.j2medev.translateimport javax.microedition.midlet.*import ja...

继续访问

Linux系统LCD显示图片的原理,linux驱动开发:用户空间 *** 作LCD显示简单的图片【转】...

上一章我们简单介绍了LCD的一些基本原理。当然更深奥的还有,比如gamma,dither,HUE,satuation.OSD等等.我们知道我们是用framebuffer来实现显示的.显存:framebuffer.由DDRAM中划去一部分内存供显存使用.从而 *** 作lcd相当于 *** 作显存.lcd控制器(s5pv210里面有lcd控制器)会周期的获取framebuffer中的数据。经过处理丢给 显示屏的lc...

继续访问

linux中如何在fb上显示

framebuffer 帧缓冲 https://blog.csdn.net/readnap/article/details/83006523 帧缓冲(framebuffer)是Linux 系统为显示设备提供的一个接口,它将显示缓冲区抽象,屏蔽图像硬件的底层差异,允许上层应用程序在图形模式下直接对显示缓冲区进行读写 *** 作。用户不必关心物理显示缓冲区的具体位置及存放方式,这些都由帧缓冲设备驱动本身来完成。 framebuffer机制模仿显卡的功能,将显卡硬件结构抽象为一系列的数据结构,可以通过fra...

继续访问

如何让linux fb0显示命令行,linux – 如何将/ dev / fb0用作来自用户空间的控制台,或者将文本输出到它...

所以我有一个Palm Pre(原始P100EWW)模型,我启用了开发人员模式,并安装了Debian Squeeze chroot.效果很好.我计划将这个用于任何东西(bittorrent peer,web server)但是一部手机.我注意到我是否做了猫/ dev / urandom>/ dev / fb0它实际上将随机像素写入屏幕,直到生成设备错误上没有剩余空格.真棒,现在我可以使用显示...

继续访问

linux 如何查看fb中分辨率_linux下直接写framebuffer(fb0)的方式显示bmp图像

linux下的显示设备就是/dev/fb0,往该设备写入的数据会显示在屏幕上,所以我们可以通过直接写frame buffer这个/dev/fb0设备来实现bmp图像的显示,而不用管是在shell文本方式下还是在其他gnome、qt、gtk、wayland等图形模式下,都能显示出来。当前前提是你的linux下必须具有该设备并支持读写(无特殊处理的linux都有该设备)。代码(支持16位、24位或32...

继续访问

Linux下LCD编程(fb设备_console_汉化)

http://blog.csdn.net/leichelle/article/details/7417367

继续访问

如何改造 Linux 虚拟终端显示文字

CJKTTY 补丁是什么,为什么我写了它 当你不使用 X 的时候,打开电脑,你就在使用虚拟终端。这么多年来它工作的很好,直到它来到了中国。包含中文字符的文件名无法正确显示,中文文档无法阅读。当然可以使用 X , 但是我为什么不能让终端也能显示汉字呢?如果在 X 下我能让屏幕显示汉字,终端下一定也能。为此我开始了 internet 上的搜寻。 我找到了 fbterm,这是个可以利用 /dev/

继续访问

LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频

讲解LCD的原理和mmap函数,BMP格式图片的的显示,触摸屏的概念和原理以及触摸屏输入的解读,以及音乐视频播放和图片缩放。

继续访问

undefined reference to `jpeg_std_error(jpeg_error_mgr*)

背景 linux + QT BMP图片转JPG #include <jpeglib.h>编译错误: root@happy-virtual-machine:/home/happy/Lee/Detector2# make arm-linux-g++ -Wl,-O1 -Wl,-rpath,/opt/qt-4.7.1/lib -o Detector2 main.o...

继续访问

linux屏幕滑动效果实现代码,使用swipe方法模拟屏幕滑动与手势密码绘制

前言App自动化测试中有两个很重要的 *** 作,屏幕滑动与绘制手势密码。目前很多App在启动时,都存在启动时的引导动画或者加载上下文内容时需要手动上滑或者下滑加载页面,所以在自动化测试的过程中模拟手的滑动 *** 作看起来就很重要了;第二个比较重要的是模拟手动绘制九宫格完成手势密码的设置,这种手势密码在我了解的范围内,大多在金融类的app中最常见,还有一些对用户信息保密性较好的app中,所以,模拟绘制手势密码也...

继续访问

Linux下LCD图片放大缩小实现,仿QQ空间滑动图片放大缩小控件

先来看一下效果:scrollzoom_listview.gif一、设计思路与实现步骤1、本例是通过重写ListView来实现的,头部的图片是ListView的HeadView。定义一个headview.xml布局文件,在这个布局文件中放一个ImageView,并给IamgeView设置一个初始高度2、实现下拉图片放大当ListView处于顶部的时候下拉实现图片放大,这里要用的一个核心的方法是ove...

继续访问

无法解析的外部符号 jpeg_std_error

1>dlib.lib(png_loader.obj) : error LNK2001: 无法解析的外部符号 png_set_sig_bytes 1>dlib.lib(png_loader.obj) : error LNK2001: 无法解析的外部符号 png_sig_cmp 1>dlib.lib(png_loader.obj) : error LNK2001: 无法解析的外部符号...

继续访问

Linux LCD驱动(二)——图形显示

BMP和JPEG图形显示程序 1) 在LCD上显示BMP或JPEG图片的主流程图 首先,在程序开始前。要在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0。命令如下: mknod fb0 c 29 0 在LCD上显示图象的主流程图如图1所示。程序一开始要调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图形

继续访问

嵌入式Linux下完成LCD屏文字显示(帧缓冲框架)

帧缓冲框架是Linux下专门为显示类设备设计的接口,目的是将硬件和软件层分离开,方便应用层的编程,也方便应用层程序移植。帧缓冲框架向驱动层和应用层分别提供了一套标准接口,驱动层按照框架编写驱动,应用层按照框架编写应用程序。帧缓冲在/dev目录下生成的标准节点是fb,比如:/dev/fb0,/dev/fb1等等。

继续访问

linux 如何查看fb中分辨率_通过Linux FrameBuffer将像素绘制到屏幕上

最近,我对一个奇怪的想法感到震惊,他想从/ dev / urandom中获取输入,将相关字符转换为随机整数,然后使用这些整数作为像素rgb /xy值来绘制到屏幕上。我已经做过一些研究(在StackOverflow和其他地方),许多建议您可以直接直接写入/ dev /fb0,因为它是设备的文件表示形式。不幸的是,这似乎没有产生任何视觉上明显的结果。我找到了一个来自QT教程(不再可用)的示例C程序


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

原文地址: http://outofmemory.cn/yw/7105616.html

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

发表评论

登录后才能评论

评论列表(0条)

保存