C語言實現(xiàn)對bmp格式圖片打碼
相信大家看到上面的標題一定覺的是上面高大上的技術,其實很簡單。
前提準備:一張bmp格式的圖片,如果沒有的話,可以用Windows的畫圖軟件來才裁剪。設置像素大小為(1024,768);
程序原理:將圖片讀入數(shù)組,然后給數(shù)組的指定位置存入隨機數(shù),最后再寫入文件,這樣圖片就相應的位置就被置為亂碼了。
源代碼:
<span style="font-size:14px;">#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<errno.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#define WIDTH 1024
#define HEIGHT 768
#define BPP 24
#define BYTES (BPP / 8)
#define HEADER 54
int main(int argc,char* argv[])
{
int xoff,yoff,width,height;
int fd;
int i,j,k;
int offset;
unsigned char pix[BYTES];
if(argc!=6)
{
printf("Usage: %s filename xoff yoff width height\n",argv[0]);
exit(EXIT_FAILURE);
}
xoff=atoi(argv[2]);
yoff=atoi(argv[3]);
width=atoi(argv[4]);
height=atoi(argv[5]);
xoff=HEIGHT -xoff;
yoff=WIDTH - yoff;
fd=open(argv[1],O_WRONLY);
if(fd==-1)
{
perror("open");
exit(EXIT_FAILURE);
}
for(i=xoff;i > xoff - height;i--)
{
for(j=yoff;j > yoff - width;j--)
{
offset = HEADER + (i * WIDTH -j )*BYTES;
lseek(fd, offset, SEEK_SET);
for(k=0; k<BYTES; k++)
{
pix[j] = random();
write(fd ,&pix[j] ,1);
}
}
}
close(fd);
return 0;
}</span>
輸入格式:
參數(shù)解釋: banner.bmp 是圖片文件的文件名,100 100是打碼的位置,500 500 是打碼的大小。(注:源程序和文件名在同一文件夾下)

原始圖片如下:

執(zhí)行源程序過后,圖片如下:

以上就是本文的全部內容,希望對大家學習C語言程序設計有所幫助。
相關文章
C語言數(shù)據(jù)結構之動態(tài)分配實現(xiàn)串
這篇文章主要介紹了C語言數(shù)據(jù)結構之動態(tài)分配實現(xiàn)串的相關資料,希望通過本文能幫助到大家,讓大家實現(xiàn)數(shù)據(jù)結構中動態(tài)分配實現(xiàn)串的實例,需要的朋友可以參考下2017-10-10
C++?BoostAsyncSocket實現(xiàn)異步反彈通信的案例詳解
這篇文章主要為大家詳細介紹了C++?BoostAsyncSocket如何實現(xiàn)異步反彈通信,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的可以了解一下2023-03-03
C語言根據(jù)協(xié)議分割獲取字符串單元的實現(xiàn)代碼
今天小編就為大家分享一篇關于C語言根據(jù)協(xié)議分割獲取字符串單元的實現(xiàn)代碼,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12

