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文件进行了简 ...
随机推荐
- 【ZOJ 3609】Modular Inverse 最小乘法逆元
The modular modular multiplicative inverse of an integer a modulo m is an integer x such that a-1≡x ...
- HDU2222 自动机(学习中)
题目大意: 给你很多个单词,然后给你一篇文章,问给出的单词在文章中出现的次数. 解题思路: AC自动机入门题.需要注意的就是可能有重复单词 代码如下: #include<iostream> ...
- ZOJ 3228 Searching the String(AC自动机)
Searching the String Time Limit: 7 Seconds Memory Limit: 129872 KB Little jay really hates to d ...
- 例 7-10 uva12212(迭代加深搜索)
题意:对于一段数字,每次可以剪切一段连续的自然数,粘贴到任意部分,使其变成升序 思路: 考虑的是进行搜索,深搜并不能保证是最短,广搜感觉每层的情况太多. 迭代加深:枚举搜索深度,然后进行深搜. 这种方 ...
- 实现PC视频播放最强画质教程( Potplayer播放器+MADVR插件)【转】
转自:http://www.hangge.com/blog/cache/detail_1461.html 一.MADVR介绍 MADVR 是一款超强的视频插件,其配合高清播放软件,可以做到目前 PC ...
- python类库numpy中常见函数的用法
1. numpy.reshape 重塑 reshape是一种函数,函数可以重新调整矩阵的行数.列数.维数. B = reshape(A,m,n) 返回一个m*n的矩阵B, B中元素是按列从A中得到的 ...
- 笔记11 在XML中声明切面(2)
为通知传递参数 1.声明一个CompactDiscs接口.内部包含两个方法: show() 用于显示唱片的名字和艺术风格 playTrack(int number) 根据传入的磁道数播放相应磁道的音乐 ...
- selenium常用内容
一.声明浏览器对象 注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入 from selenium import webdriver #webdriver可以认为是浏览器的 ...
- c# error
部署iis c# 连sqlserver 用IIS发布之后,网页出错.提示为:异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\I ...
- 54. Spiral Matrix(中等)
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...