linu下C语言之BMP图片操作编程(中)
http://blog.csdn.net/morixinguan/article/details/50719472
关于BMP图的介绍之前已经说过了,最近要用到,又要重新开始学习。
现在实现一个让bmp左转的效果:
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#define  RGB(r,g,b)    		((r<<16)|(g<<8)|b)
typedef  unsigned char  U8 ;
typedef  unsigned short U16 ;
typedef  unsigned int   U32 ; 
#pragma  pack(1)
struct bmp_header
{
	//bmp header
	U8  Signatue[2] ;   // B  M
	U32 FileSize ;     //文件大小
	U16 Reserv1 ;
	U16 Reserv2 ;
	U32 FileOffset ;   //文件头偏移量
	//DIB header
	U32 DIBHeaderSize ; //DIB头大小
	U32 ImageWidth   ;  //文件宽度
	U32 ImageHight   ;  //文件高度
	U16 Planes       ;
	U16 BPP          ;  //每个相素点的位数
	U32 Compression  ;
	U32 ImageSize    ;  //图文件大小
	U32 XPPM ;
	U32 YPPM ;
	U32 CCT ;
	U32 ICC ;
};
#pragma  pack()
int main(int argc , char **argv)
{
	if(argc != 3)
		return -1 ; 
	int fd ;
	int dest_fd ;
	fd = open(argv[1] , O_RDONLY);
	if(-1 == fd)
	{
		perror("open bmp file fail");
		return -2 ;
	}
	dest_fd = open( argv[2] , O_RDWR | O_CREAT|O_TRUNC , 0777);
	if(dest_fd < 0 )
	{
		perror("open rgb565 fail");
		return -3 ;
	}
	struct bmp_header  header ; 
	int ret ; 
	ret = read(fd , &header , sizeof(struct bmp_header));
	printf(" Signatue[0]      : %c  \n " , header.Signatue[0]  );
	printf(" Signatue[1]      : %c  \n " , header.Signatue[1]  );
	printf(" FileSize         : %d  \n " , header.FileSize     );
	printf(" Reserv1          : %d  \n " , header.Reserv1      );
	printf(" Reserv2          : %d  \n " , header.Reserv2      );
	printf(" FileOffset       : %d  \n " , header.FileOffset   );
	printf(" DIBHeaderSize    : %d  \n " , header.DIBHeaderSize);
	printf(" ImageWidth       : %d  \n " , header.ImageWidth   );
	printf(" ImageHight       : %d  \n " , header.ImageHight   );
	printf(" Planes           : %d  \n " , header.Planes       );
	printf(" BPP              : %d  \n " , header.BPP          );
	printf(" Compression      : %d  \n " , header.Compression  );
	printf(" ImageSize        : %d  \n " , header.ImageSize    );
	printf(" XPPM             : %d  \n " , header.XPPM         );
	printf(" YPPM             : %d  \n " , header.YPPM         );
	printf(" CCT              : %d  \n " , header.CCT          );
	printf(" ICC              : %d  \n " , header.ICC          );
	char buffer[header.ImageSize] ; 
	read(fd , buffer , header.ImageSize);
	close(fd);
	//改变地方
	header.ImageWidth = 480;
	header.ImageHight = 800 ; 
	write(dest_fd , &header , sizeof(struct bmp_header));
	int row , col ;
	char *p = NULL ; 
	for(col = 0 ; col < 800; col++)
	{
		for(row = 480-1 ; row >= 0; row--)
		{
			p =( buffer+(row*800 + col)*3);
		//	data = RGB((unsigned char)(*(p+2)) , (unsigned char)(*(p+1)) ,
		//	(unsigned char )(*(p)));
			write(dest_fd , p , 3);
		}
	}
	close(dest_fd);
	return 0 ;
}
												
											linu下C语言之BMP图片操作编程(中)的更多相关文章
- linu下C语言之BMP图片操作编程(上)
		BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ... 
- linu下C语言之BMP图片操作编程(下)
		前面提高了一个将BMP左转的程序,右转其实也是类似的操作,就不写了,这节,我们来实现,将一张BMP图进行灰度处理,代码贴上: #include <stdio.h> #include < ... 
- 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
		关于bmp图片的格式,网上有很多文章,具体可以参考百度百科,也有例子程序.这里只提要注意的问题. (1)结构体定义问题:首先按照百度百科介绍的定义了结构体,但是编译发现重定义BITMAPFILEHEA ... 
- C语言实现BMP图片生成
		## #include <stdio.h> #include <stdlib.h> #include <string.h> typedef unsigned cha ... 
- .NET Core 图片操作在 Linux/Docker 下的坑
		一.前言 .NET Core 目前更新到2.2了,但是直到现在在 .NET Core 本身依然不包括和图片有关的 Image.Bitmap 等类型.对于图片的操作在我们开发中很常见,比如:生成验证码. ... 
- 位图文件格式及linux下C语言来操作位图文件
		说到图片,位图(Bitmap)当然是最简单的,它是Windows显示图片的基本格式,其文件扩展名为*.BMP.由于没有经过任何的压缩,故BMP图片往往很大.在Windows下,任何格式的图片文件都要转 ... 
- 嵌入式linux------SDL移植(am335x下显示bmp图片)
		#include<stdio.h> #include "/usr/local/ffmpeg_arm/include/SDL/SDL.h" char *bmp_name[ ... 
- bmp图片的有关操作
		读取bmp图片 并生成新的bmp图片 #include "stdafx.h"#include <windows.h>#include <cmath>#inc ... 
- c语言数字图像处理(一):bmp图片格式及灰度图片转换
		本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ... 
随机推荐
- ●BZOJ 3129 [Sdoi2013]方程
			题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3129 题解: 容斥,扩展Lucas,中国剩余定理 先看看不管限制,只需要每个位置都是正整数时 ... 
- linux心得
			cd .. 返回上一级文件夹cd /xxx/xxxx/xx 进入文件夹cd Desktop 进入桌面sudo vim /etc/vim/vimrc 进入vim配置器:w xxx 保存为名为xxx的文件 ... 
- C++中compile与build的区别
			我在前面的博文就提到了GCC编译器工作的四个阶段:预处理.编译.汇编.链接. 感兴趣的同学可以参考:http://www.cnblogs.com/mlgjb/p/7708007.html compil ... 
- new File()
			首先 File 类是对文件系统的映射 并不是硬盘上真实的文件所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会在硬盘中创建文件 如果需要创 ... 
- 取list的值
			list.get(0):之类的我就不写了 我就写一个我老忘记的 Iterator it = list.iterator(); while(it.hasNext()){ Student stu = it ... 
- JavaScript数据结构和算法----队列
			前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ... 
- day0203 XML 学习笔记
			day02, 03 1. xml语言和作用 2. xml语法详解 2.1 xml 语法声明 2.1.1 encoding 属性 2.1.2 standalone 属性 2.2 xml 元素(Eleme ... 
- Jmeter_ForEach控制器实现网页爬虫
			一直以来,爬虫似乎都是写代码去实现的,今天像大家介绍一下Jmeter如何实现一个网页爬虫! Jmeter的爬虫原理其实很简单,就是对网页提交一个请求,然后把返回的所有href提取出来,利用ForEac ... 
- Junit4  java.lang.Exception: No runnable methods
			出现如下错误: java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validat ... 
- 【移动开发】targetSdkVersion的作用
			在AndroidMenifest.xml中,常常会有下面的语句: <uses-sdk android:minSdkVersion="4" android:targetSdkV ... 
