go语言bmp图片 golang bmp
golang怎么实现psd
您好,Go语言可以实现PSD,它是一种静态类型的编程语言,可以用来开发各种应用程序。Go语言拥有简单的语法,可以让开发者快速地实现PSD。Go语言支持多种编程范式,可以用来实现面向对象、函数式编程和过程式编程等。Go语言拥有强大的标准库,可以提供开发者丰富的功能,例如网络通信、文件系统操作、数据结构操作等。Go语言还支持多种编程框架,可以用来实现PSD。Go语言还支持多种编程工具,可以帮助开发者更快地实现PSD。总之,Go语言是一种强大的编程语言,可以帮助开发者快速实现PSD。
成都一家集口碑和实力的网站建设服务商,拥有专业的企业建站团队和靠谱的建站技术,十多年企业及个人网站建设经验 ,为成都成百上千客户提供网页设计制作,网站开发,企业网站制作建设等服务,包括成都营销型网站建设,成都品牌网站建设,同时也为不同行业的客户提供成都网站制作、成都网站设计的服务,包括成都电商型网站制作建设,装修行业网站制作建设,传统机械行业网站建设,传统农业行业网站制作建设。在成都做网站,选网站制作建设服务商就选成都创新互联。
c语言,怎样读取一个BMP图片?
#ifndef IMAGE_H
#define IMAGE_H
void image_info(FILE* file);
void image_save(FILE *file);
void image_gray();
void image_binarization();
void image_opposite();
void image_channel(); //抽取RGB通道
void image_bright();//改变图像亮度
typedef struct BMP
{
//14字节
unsigned short bfType; //文件标识 2字节 必须为BM
unsigned int bfSize; //文件大小 4字节
unsigned short bfReserved1; //保留,每字节以"00"填写 2字节
unsigned short bfReserved2; //同上 2字节
unsigned int bfOffBits; //记录图像数据区的起始位置(图象数据相对于文件头字节的偏移量)。 4字节
//40字节
unsigned int biSize; //表示本结构的大小 4字节
int biWidth; //位图的宽度 4字节
int biHeight; //位图的高度 4字节
unsigned short biPlanes; //永远为1 , 2字节
unsigned short biBitCount; //位图的位数 分为1 4 8 16 24 32 2字节
unsigned int biCompression; //压缩说明 4字节
unsigned int biSizeImage; //表示位图数据区域的大小以字节为单位 4字节
int biXPelsPerMeter; //用象素/米表示的水平分辨率 4字节
int biYPelsPerMeter; //用象素/米表示的垂直分辨率 4字节
unsigned int biClrUsed; //位图使用的颜色索引数 4字节
unsigned int biClrImportant; //对图象显示有重要影响的颜色索引的数目 4字节
} BMP;
int line_byte;
unsigned char *imagedata;
extern BMP bmp;
extern int line_byte;
extern unsigned char *imagedata;
#endif
//image_rw.c文件
#includestdio.h
#includestdlib.h
#include"image.h"
void image_info(FILE *file)
{
int times=3; //输入文件名次数。
char bmp_name[10]; //文件名
printf("\nplease enter a file name for reading:");
do
{
if (times3)
{
printf("\nplease enter a file name for reading again:");
}
fflush(stdin);
gets(bmp_name);
//printf("\n%s",bmp_name);
file=fopen(bmp_name,"rb+"); //打开一个文件进行读写操作。
--times;
if (file==NULL)
{
printf("\nerror opening %s for reading! ",bmp_name);
}
else
{
break;
}
}
while(times!=0);
if (times==0)
{
printf("\nsorry, shutdown!");
exit(1);
}
//读取图像信息
fseek(file,0L,0); //读取图像文件类型
fread(bmp,sizeof(BMP),1,file);
printf("\n bmp tpye: %u",bmp.bfType);
printf("\n bmp size: %u",bmp.bfSize);
printf("\n bmp reserved1: %u",bmp.bfReserved1);
printf("\n bmp reserved2: %u",bmp.bfReserved2);
printf("\n bmp offBits: %u",bmp.bfOffBits);
printf("\n bmp bisize: %u",bmp.biSize);
printf("\n bmp biWidth: %d",bmp.biWidth);
printf("\n bmp biHeight: %d",bmp.biHeight);
printf("\n bmp biplans: %u",bmp.biPlanes);
printf("\n bmp biBitCount: %u",bmp.biBitCount);
printf("\n bmp biCompression: %u",bmp.biCompression);
printf("\n bmp biSizeImage: %u",bmp.biSizeImage);
printf("\n bmp biXPelsPerMeter: %d",bmp.biXPelsPerMeter);
printf("\n bmp biYPelsPerMeter: %d",bmp.biYPelsPerMeter);
printf("\n bmp biClrUsed: %u",bmp.biClrUsed);
printf("\n bmp biClrImportant: %u\n",bmp.biClrImportant);
line_byte=(bmp.biWidth*bmp.biBitCount/8+3)/4*4; //获得图像数据每行的数据个数
//printf("dfsa%u",bmp.line_byte);
//bmp.imagedata=NULL;
imagedata=(unsigned char*)malloc(bmp.biSizeImage);
fseek(file,(long)bmp.bfOffBits,0);
fread(imagedata,sizeof(unsigned char),bmp.biSizeImage,file);
fclose(file);
}
//保存图像
void image_save(FILE *file)
{
int times=3; //输入文件名次数。
char bmp_name[10]; //文件名
//int i; //记录数据区个数
printf("\nplease enter a file name for writeing:");
do
{
if (times3)
{
printf("\nplease enter a file name for writeing again:");
}
fflush(stdin);
gets(bmp_name);
printf("\n%s",bmp_name);
file=fopen(bmp_name,"wb+"); //打开一个文件进行读写操作。
--times;
if (file==NULL)
{
printf("\nerror opening %s for writing",bmp_name);
}
else
{
break;
}
}
while(times!=0);
if (times==0)
{
printf("\nsorry, shutdown!");
exit(1);
}
//写文件头
printf("\n%s",bmp_name);
fseek(file,0L,0); //图像文件类型
fwrite((bmp.bfType),sizeof(short),1,file);
printf("\n bmp tpye: %d",bmp.bfType);
fseek(file,2L,0); //图像文件大小
fwrite((bmp.bfSize),sizeof(int),1,file);
printf("\n bmp size: %d",bmp.bfSize);
fseek(file,6L,0); //图像文件保留字1
fwrite((bmp.bfReserved1),sizeof(short),1,file);
printf("\n bmp reserved1: %d",bmp.bfReserved1);
fseek(file,8L,0); //图像文件保留字2
fwrite((bmp.bfReserved2),sizeof(short),1,file);
printf("\n bmp reserved2: %d",bmp.bfReserved2);
fseek(file,10L,0);//数据区的偏移量
fwrite((bmp.bfOffBits),sizeof(short),1,file);
printf("\n bmp offBits: %d",bmp.bfOffBits);
fseek(file,14L,0);//文件头结构大小
fwrite((bmp.biSize),sizeof(int),1,file);
printf("\n bmp bisize: %d",bmp.biSize);
fseek(file,18L,0);//图像的宽度
fwrite((bmp.biWidth),sizeof(int),1,file);
printf("\n bmp biWidth: %d",bmp.biWidth);
fseek(file,22L,0);//图像的高度
fwrite((bmp.biHeight),sizeof(int),1,file);
printf("\n bmp biHeight: %d",bmp.biHeight);
fseek(file,24L,0);//图像的面数
fwrite((bmp.biPlanes),sizeof(short),1,file);
printf("\n bmp biplans: %d",bmp.biPlanes);
fseek(file,28L,0);//图像一个像素的字节数
fwrite((bmp.biBitCount),sizeof(short),1,file);
printf("\n bmp biBitCount: %d",bmp.biBitCount);
fseek(file,30L,0);//图像压缩信息
fwrite((bmp.biCompression),sizeof(short),1,file);
printf("\n bmp biCompression: %d",bmp.biCompression);
fseek(file,34L,0);//图像数据区的大小
fwrite((bmp.biSizeImage),sizeof(int),1,file);
printf("\n bmp biSizeImage: %d",bmp.biSizeImage);
fseek(file,38L,0);//水平分辨率
fwrite((bmp.biXPelsPerMeter),sizeof(int),1,file);
printf("\n bmp biXPelsPerMeter: %d",bmp.biXPelsPerMeter);
fseek(file,42L,0);//垂直分辨率
fwrite((bmp.biYPelsPerMeter),sizeof(int),1,file);
printf("\n bmp biYPelsPerMeter: %d",bmp.biYPelsPerMeter);
fseek(file,46L,0);//颜色索引数
fwrite((bmp.biClrUsed),sizeof(int),1,file);
printf("\n bmp biClrUsed: %d",bmp.biClrUsed);
fseek(file,50L,0);//重要颜色索引数
fwrite((bmp.biClrImportant),sizeof(int),1,file);
printf("\n bmp biClrImportant: %d\n",bmp.biClrImportant);
fseek(file,(long)(bmp.bfOffBits),0);
fwrite(imagedata,sizeof(unsigned char),bmp.biSizeImage,file);
fclose(file);
}
//pixProcess.c文件
#includestdio.h
#includestdlib.h
#includemath.h
#include"image.h"
//灰度化
void image_gray()
{
int i,j;
unsigned char tmp;
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte/3;j++)
{
tmp=0.11*(*(imagedata+i*line_byte+j*3+0))+0.59*(*(imagedata+i*line_byte+j*3+1))+0.3*(*(imagedata+i*line_byte+j*3+2));
imagedata[i*line_byte+j*3+0]=tmp;
imagedata[i*line_byte+j*3+1]=tmp;
imagedata[i*line_byte+j*3+2]=tmp;
//printf("\nnidsfh%d %d",i,j);
}
}
}
//二值化
void image_binarization()
{
int i,j;
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte;j++)
{
if ((*(imagedata+i*line_byte+j))128)
{
imagedata[i*line_byte+j]=0;
}
else
{
imagedata[i*line_byte+j]=255;
}
}
}
}
void image_opposite() //反相
{
int i,j;
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte;j++)
{
imagedata[i*line_byte+j]=abs(255-imagedata[i*line_byte+j]);
}
}
}
void image_channel() //抽取RGB通道
{
int i,j;
char rgb;
printf("\nplease enter a char(r/g/b): ");
fflush(stdin);
scanf("%c",rgb);
if (rgb=='b')
{
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte/3;j++)
{
imagedata[i*line_byte+3*j+1]=0;
imagedata[i*line_byte+3*j+2]=0;
}
}
}
else if(rgb=='g')
{
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte/3;j++)
{
imagedata[i*line_byte+3*j]=0;
imagedata[i*line_byte+3*j+2]=0;
}
}
}
else
{
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte/3;j++)
{
imagedata[i*line_byte+3*j]=0;
imagedata[i*line_byte+3*j+1]=0;
}
}
}
}
void image_bright()//改变图像亮度
{
int level;
int i,j;
printf("\n please enter the level of brightness[-255 to 255] :");
fflush(stdin);
scanf("%d",level);
for (i=0;ibmp.biHeight;i++)
{
for (j=0;jline_byte;j++)
{
if (level=0)
{
if ((imagedata[i*line_byte+j]+level)255)
imagedata[i*line_byte+j]=255;
else
imagedata[i*line_byte+j]+=level;
}
else
{
if ((imagedata[i*line_byte+j]-abs(level))0)
imagedata[i*line_byte+j]=0;
else
imagedata[i*line_byte+j]+=level;
}
}
}
}
//void image_create() //创建一幅24位BMP图像文件。
//{
//main.c文件
#includestdio.h
#includestdlib.h
#includestring.h
#includeconio.h
#include"image.h"
BMP bmp;
int main()
{
FILE *file=NULL;
int choose;
char gono;
do
{
image_info(file); //imagedata已经分配了动态内存,但是没有释放
printf("\n 1.image_opposite");
printf("\n 2.image_gray");
printf("\n 3.image_binarization");
printf("\n 4.image_channel");
printf("\n 5.image_brightness");
//printf("6.image_opposite");
//printf("7.image_opposite");
printf("\nchoose your options:");
fflush(stdin);
scanf("%d",choose);
switch(choose)
{
case 1:
image_opposite();
image_save(file);
free(imagedata);
break;
case 2:
image_gray();
image_save(file);
free(imagedata);
break;
case 3:
image_binarization();
image_save(file);
free(imagedata);
break;
case 4:
image_channel();
image_save(file);
free(imagedata);
break;
case 5:
image_bright();
image_save(file);
free(imagedata);
break;
default:
printf("\n wrong choose!");
}
printf("\nlet's go on?(y/n):");
fflush(stdin);
scanf("%c",gono);
if (gono=='n')
{
printf("\nbye bye!");
break;
}
}
while(1);
return 0;
}
如何取消图片自动切换,只保留点击按钮切换,或者给个类似的完整代码,谢谢。
用HyperSnap或fpe2001截图。有些游侠有截图热键,看正版说明书就知道。截图后需用acdsee转换成jpg格式,省空间。
-
HyperSnap-DX_V5.11.01汉化注册版 用法
按压缩包内的使用说明装软件后,启动HyperSnap,点“选项-配置快捷键”,选中“启用快捷键”,也可把键组合调整为合适的。点菜单栏的“捕捉”,选中“启用特殊捕捉Directx”。在弹出的对话框选中所有项目,“3D图形控制卡类型”任选一项,这是根据显卡状况选的,一般不用调整,若截图的颜色不好看,请选“1×4”或“1×2”。点菜单栏的“捕捉-捕捉设置”,前3个选项卡用默认值,“查看和编辑”选项卡选中“使用新的捕捉替换当前”,“快速保存”选项卡选中“自动将每次捕捉的图像保存到文件中”,点“更改”选择图片保存路径,选中“文件名依序递增”,“停止保存于”填入99999。
游戏或视频中,按ScrollLock键截图,并自动保存成bmp格式。对视频截图时,必须令播放器处于当前窗口状态,可让视频暂停后在截图。
最后用ACDSee把图片转为jpg格式。
游戏和视频需启用特殊捕捉Directx。对一般窗口用ctrl+shift+w截取,会自动滚屏。对窗口中某个区域截图用ctrl+shift+r 。
-
下载地址
截图软件HyperSnap.zip
匿名提取文件连接
打开页面后,点左边的“免登录下载”按钮
-
fpe2001截图方法
安装fpe2001后,执行fpe.exe启动软件。点“捉图”选项卡,选中“on”,设置保存位置,“编号”输入4个0,这样文件名自动命名为pic0001,pic0002,这样的四位数。选中“++”的复选框,表示文件名按+1的顺序命名。每次启动游戏前,先启动ftp,看看“捉图”设置对不对。之后启动游戏。按print键截图并自动保存。图片是bmp格式,在800*600分辨率下,图片是1.4M,需用ACDSee转换成jpg图片。建议安装ACDSee3.1,启动速度快。在ACDSee浏览所有图片的界面,ctrl+a选中所有图片,右键选“转换/converter”,选jpg格式,“设置”按钮里的一般不调,里面有个清晰度的数值,65是推荐值,想保持高清晰就调90。
--
贴网上的:
HyperSnap-DX使用方法:
HyperSnap-DX是一款运行于Microsoft Windows平台下的抓屏软件,利用它我们可以很方便地将屏幕上的任何一个部分,包括活动客户区域、 活动窗口、客户区域、桌面等抓取下来,供我们使用,确实是一个功能强大的抓图软件。
1.保存序列号有技巧
很多朋友都遇到过注册码失效的情况:即某一注册码注册后过几天后Hypersnap-DX会弹出窗口提示无效的注册,要求重新注册。而且即使用原来的注册码根本注册不成功!其实,我们只要先将Hypersnap-DX卸载,然后就可以用原先的注册码注册成功了。最后,还要选择“帮助”→“检查是否有新版本”命令,并在弹出的窗口中将“自动检查新版本的间隔”设置为0天,以后就不会有问题了。
另外,Hypersnap-DX 4.x的序列号保存在C:\Program Files\HyperSnap-DX 4\HprSnap.hs4li文件中,而5.x的则保存在C:\Program Files\HyperSnap-DX 5\HprSnap5.hs5lic文件中。你只要把这些文件保存起来,等重新安装软件后,再把它们拷贝到安装文件夹下即可完成注册。
2.连同光标抓取
有时为了得到更加真实的效果,往往需要连同光标一起抓下来。这时候HyperSnap-DX的连同光标抓取图像功能就有了它的用武之地,只要我们选择“捕捉”→“捕捉设置”命令,在打开的“捕捉设置”窗口中,选中“包括光标指针”选项,按“确定”按钮退出,以后抓取后的图像上就会有可爱逼真的小光标图像了。
3.抓取滚动窗口
如果要抓取的目标画面太长而在一屏上显示不了,这时很多人分屏抓成几个文件,再用绘图软件把它们拼起来。其实,我们只要选择“捕捉”→“捕捉设置”命令,选择“捕捉”标签,并选中“窗口捕捉时自动滚动窗口”选项,然后再抓那些超长图片时,你会发现HyperSnap完全能够突破屏幕和滚动条的限制,自动一边卷动画面一边抓图,这样就可以把很长的画面一次性全部抓取。
4.抓取扩展窗口
通过这个功能,我们可以做到真正的“所见即所抓”,即可以把屏幕上显示的内容“一网抓尽”。如我们在浏览一个网站时,在IE中显示的内容不止一页,此时IE会在窗口的右边出现滚动条,这时通过一般的方法无法抓取到滚动条下面的图片。我们只要选择“捕捉”菜单下的“延展活动窗口”命令或者按下Ctrl+
Shift+X快捷键即可抓取。
小提示
★要抓取扩展窗口,必须运行在Windows XP下。
★在很多抓取软件中支持自动卷屏功能(Auto Scrolling),这些相应报刊也有所介绍,但是它和扩展窗口抓取是有一定区别的。以一个IE窗口为例,如果我们只想抓取带有滚动条部分区域,则可以使用自动卷屏功能,但如果想抓取整个窗口的外框(即包括标题条、工具栏和其他内容区)并连同滚动条下的所有内容时,则必须使用扩展窗口抓取功能。
★被抓取的窗口必须不处于最大化状态,否则无法被捕获。
5.抓取VCD、DVD及DirectX显示图像
VCD、DVD及DirectX显示的图像很特殊,使用PrintScreen键把它复制到剪贴板后,再通过画图程序打开保存后会发现它是红色的,无法抓取。不过,选中“捕捉”→“启用特殊捕捉(Directx,Glide,DVD...) ”选项,并在弹出的设置框中选中所有选项,以后只要按下Scroll Lock键就可以抓取到VCD、DVD或DirectX图像了。
6.界面定制随心所欲
新版HyperSnap把工具栏、菜单及浮动窗口三者完全融合在一起,菜单可变成浮动窗口,浮动窗口又可变成工具栏,而其相互间的转换仅仅需要鼠标轻轻地拖动。这样我们就可以完全根据自己的需要来更好地定制整个操作范围。
7.一次显示所有的菜单
同时,在显示风格上,HyperSnap-DX的菜单也能够自动隐藏不常使用的菜单,已经是尽得Office XP风格精髓。如果你想一次显示所有的菜单,一种方法是直接双击菜单项即可。二来,你也可以取消“选项”菜单下“OfficeXP风格”勾选来取消此功能。
8.快速全屏显示图像
要让HyperSnap中的图片全屏显示,只要按下Ctrl+PageDown键即可。而要恢复,则可按下任意键。
9.把它当作一个图像浏览器
HyperSnap-DX除了可以对浏览的图片进行编辑外,还可以把它当成一个图像浏览器。选择“文件”→“打开”命令,打开一幅图像,然后使用快捷键PageUp和PageDown向上和向下浏览图片。
10.抓取动态图像
选中“捕捉”→“捕捉设置”命令,在打开的“捕捉设置”窗口中选择“快速保存”选项卡,在设置框中选中相关选项,包括文件包及起始名称、终止名称、抓取间隙时间(0为不连续抓取)等参数,然后点下抓取桌面的热键后就可以将操作抓成BMP序列,再通过ACDSee软件的Rename Series功能将之存为符合Animator Studio的格式,然后通过Animator Studio导入这些BMP序列,再存为AVI文件即可实现动态抓取功能了。
11.自动启动HyperSnap
既然HyperSnap是我们经常要用到的抓取工具,那我们没有理由不让它随系统自动启动。选择“选项”→“启动和托盘区图标”命令,在打开的“启动和托盘区图标”设置窗口中选中“随着 Windows 自动启动”、“总是最小化启动”和“在最小化时,仅显示托盘图标”选项,同时一并选中“单击”关闭窗口”[X] 按钮时并不退出”选项。这样,HyperSnap-DX就会随系统启动,而且我们最小化或单击窗口的关闭按钮就会使HyperSnap-DX最小化到系统托盘上,按下设置的热键即可抓取图片。
12.设置图像分辨率
在HyperSnap-DX中允许我们设置图像分辨率:选择“设置”→“默认图像分辨率”命令,在打开的“图像分辨率”窗口中设置一下“水平分辨率”和“垂直分辨率”,并选中“用作将来捕捉屏幕图像的默认值”选项,以后抓取的图像就是我们设置的分辨率大小。
13.想抓哪块就抓哪块
大多数截图软件只能抓矩形、圆形、多边形窗口,但这还不够自由,如在网上见到一幅精美的建筑图片,只想选取其中一部分,这时HyperSnap的自由捕捉(Freehand)功能就派上用场了:单击“捕捉”→“自由捕捉”,然后就可以像使用Photoshop中的套索选择工具一样,将所需要截取的部分一点点圈出来,再右击鼠标,选择“结束捕捉”就可以了。
小提示
★按住鼠标左键时,将会以点的方式记录鼠标的轨迹。如果在中间松开左键,则会以直线方式连接。如果欲抓取的图形边缘有规则直线,此技巧对于选择选区法很有用。
★在HyperSnap截图中,单击并按住右键会弹出功能菜单,可以完成或取消捕捉,还可以在多种捕捉方式中进行切换。
14.批量抓取图像
以前版本的HyperSnap一次只能抓一幅图像,后面捕捉的会自动覆盖前面捕捉的内容,让我们很不方便。但新版的HyperSnap允许我们批量捕捉多幅图像,并可以自动把它们命名为Snap01、Snap02…齐排列,随便抓多少张都可以。
不过,这些文件都是临时性文件,如果你在未经编辑的情况下便全部关闭,那这些文件会被自动清除。所以我们最好让它们在抓取后自动保存起来:单击“捕捉”→“捕捉设置”,再选中“快速保存”,勾选“自动将每次捕捉的图像保存到文件中”,并设置文件名及保存的路径及起止数字即可。
15.异形窗口一次搞定
如今软件界面越做漂亮,再加上很多的软件都支持换肤操作,这样就会使窗口显得奇形怪状。有时抓取这样的窗口,会连同周围的部分也抓取下来,要把那奇形怪状的窗口从中抠出来,还真是费力不少。不过,大家只要选择“捕捉”→“窗口或控件”命令,HyperSnap即可自动探测窗口的形状,并能够按照它的实际外形进行截取。如图3,就是笔者抓取下来的Winamp 3换肤后的奇异窗口!
小提示
大家也可以把抓取下来的图片保存为支持透明背景的文件格式,如GIF、PNG等。这对于制作网页的朋友相当有用。
16.给图片盖上自己的印章
有时出于宣传的需要,很想给自己的图片加上一个标注,比如注上作者名、截取日期、版权声明之类的信息。新版本的HyperSnap可以满足我们的需要:
先打开一个图像,然后选择“图像”→“水印”(或单击工具栏上的水印工具),在弹出的窗口中单击“新建水印”命令打开“编辑水印”窗口。在“图像”选项卡里导入自己的卡通图片,勾选“水印中使用此图像”,并给此水印起一个名字即可把导入的卡通图片作为水印。
小提示
★在此选项卡中“来自选集”可以用选择工具选择当前捕捉图片,如无选择区域,则为整幅图片。
★在“文本”选项卡中也可以使用文字作为水印,同时也可以设置字体、颜色、排列方式等。另外,“日期”、“时间”、“文件”、“路径”和“用户”等为系统变量,会根据系统的变化而更改。单击“预览”按钮,则可以随时查看自己的水印效果。
★在“帧”选项卡中调整背景、边框及文本图像的位置。在“布置”中设置水印在图像中的位置和透明度。
水印建立后,大家只要单击工具栏“水印”工具旁的下拉按钮,再选择制作好的水印即可把它立即应用到当前图像中。
17.让水印自动烙到图像上
如果你希望把某个水印自动烙到所捕捉的图像上,请选择“图像”→“水印”命令,然后选择某个水印,再单击“编辑”命令,选择“布置”标签,再勾选“自动将此水印添加到所有捕捉的图像上”复选框即可。
18.定制按钮和菜单项
单击“显示”→“自定义”,在“自定义”窗口中可以将需要调整的按钮拖动到工具栏、菜单或浮动窗口中。同时,大家也可以直接单击菜单里的命令,并可以把它们拖动到任意位置。这样,不同的人可以轻松拥有自己的个性界面。
小提示
此操作与Office XP中的操作很类似,大家可以很快上手。
19.激活快捷键
在HyperSnap-DX中一定要先激活快捷键,才能在捕捉图像或者其他对象时使用快捷键。程序默认激活快捷键,如果没有激活快捷键,则在“选项”菜单中单击“激活快捷键”激活快捷键。
20.快捷键小结
缺省情况下快捷键定义如下:
Ctrl+Shift+F: 全屏幕截取。
Ctrl+Shift+V: 截取虚拟桌面。
Ctrl+Shift+W: 截取屏幕上鼠标所指窗口,闪烁的黑色矩形框内为抓取对象。
Ctrl+Shift+R: 截取特定区域,此时鼠标变为"+"光标,按住键拖动出一个矩形框,其中内容将被选中。
Ctrl+Shift+A: 截取当前活动窗口。
Ctrl+Shift+C: 截取不含边框的当前活动窗口。
Ctrl+Shift+P:截取最后指定区域。
F11: 重复最后一次截取。
Shift +F11: 停止自动截取。
Scoll Lock: 对特殊环境中的图形截取。
F1: 帮助信息。
21.自定义快捷键
单击“显示”→“自定义”,在“自定义”窗口中单击“键盘”标签,则可以指定任何一个命令的快捷键。使用我们用起来更加顺手。
22.给名捕几个助手
我们可以将外部程序或文件加到HyperSnap-DX的菜单栏里来。单击菜单“工具”→“定制工具”,单击“新建”,修改名称,再到“命令”处输入完整的路径和文件名即可(当然也可以直接单击后面的“浏览”按钮打开程序)。这样“工具”菜单里就多出启动相应程序的命令,单击即可启动相应程序,不需要再切换到桌面或开始菜单,相当给名捕多出一些助手,这对于我们这些经常需要在多个软件之间进行切换的用户来说,实在是非常贴心。
23.让HyperSnap-DX打开多种文件
单击菜单“工具”→“定制工具”,单击“新建”,修改名称,再单击“命令”旁的“浏览”按钮,在浏览窗口中,默认支持的主要类型是EXE、COM、PDF、BAT等文件。其实,当选择为所有文件(*.*)时,除了文件夹和快捷方式外,其他文件基本上都支持,这样也可以在HyperSnap中快速打开其他的文件(如DOC、TXT文件等)。
24.给图片添加阴影和边框
单击“图像”→“阴影”,在弹出的“阴影”窗口中调整阴影大小与深度。单击“图像”→“帧”,则可以为图像添加灰色边框。同时,要注意的是,加阴影、添边框不仅仅只是对图像有效,图像内选定的区域也可以加上阴影和边框。如果希望以后每幅图像都自动添加这些效果,则请在“阴影”窗口中勾选“自动添加此阴影到所有的捕捉”复选框即可。以后不需要时,再取消此项设置。
25.批量保存图像文件
单击“窗口”→“窗口”命令,在弹出的窗口中,可以配合Ctrl、Shift键选中多个窗口,然后单击“保存”按钮即可批量保存图像文件,这对于需要处理大量捕捉文件的用户来说,尤为有用。
26.使用FTP上传图片
选择“文件”→“上传到FTP服务器”命令则可以把图片上传到FTP服务器,便于你的图片共享。
27.自动打印捕捉的图像
在HyperSnap-DX中可对捕捉的图像进行自动打印。在“捕捉”菜单,单击“捕捉设置”命令,打开“捕捉设置”对话框,然后单击“复制和打印”标签,选中“自动打印每次捕捉的图像”复选框,然后单击“确定”按钮,即可对所捕捉的图像进行自动打印。
28.直接捕捉图像到Word文件
选择“捕捉”→“捕捉设置”命令,打开“捕捉设置”对话框,然后单击“复制和打印”标签,选中“将每次捕捉的图像都复制到剪贴板上”复选框,然后再选中“将每次捕捉的图像粘贴到”复选框,在其下的下拉框中选中当前正在编辑的Word文件窗口。在HyperSnap-DX中“将捕捉的图像直接粘贴到当前的Word文件”这一功能非常的好用,在写文章时,如果需要一些插图,捕捉后立刻就将它粘贴到所编辑的Word文件中。非常的方便,不像在Word中操作比较麻烦,每插入一幅图片都要进行好几步操作。
29.自动保存捕捉文件
选择“捕捉”→“捕捉设置”命令,打开“捕捉设置”对话框,然后单击“快速保存”标签,选中“自动将每次捕捉的图像保存到文件中”复选框,程序将捕捉到的图像自动保存到一个文件夹。由于Windows的剪贴板只能存放一幅图像,所以只有最后一幅被截取的图像才会保留在剪贴板中。单击“更改”按钮可以更改自动保存文件的路径。选中“每次捕捉都提示输入文件名”复选框,则在每一次捕捉完成后都要提示你输入要保存的文件名。
30.设置剪裁图像和比例的大小
选择“捕捉”→“捕捉设置”命令,打开“捕捉设置”对话框,然后单击“剪裁和比例”可以设置剪切图像的区域或大小。
31.使用图像菜单
HyperSnap-DX不仅仅是一个抓图软件,同时它也是一个非常好的图像处理软件,它还在“图像”菜单下提供了剪裁、更改分辨率、比例缩放、自动修剪、镜像、旋转、修剪、马赛克、浮雕和尖锐等功能。
32.使用颜色菜单
在HyperSnap-DX的“颜色”菜单下提供了许多比较实用的功能,如灰度、统计颜色、反转彩色和亮度等。其中“统计颜色”命令可以统计一幅图像中有多少颜色。而“灰度”命令则可以把彩色图像转为灰度图像。通过“饱和度”命令可以调整图像的饱和度,从而得到一个比较清晰的图像。
33.注册文件类型
在“选项”菜单下单击“注册文件类型”命令,打开“注册文件类型”对话框(图28),在该对话框中选择要用HyperSnap-DX打开的文件类型。HyperSnap-DX中提供了八种类型的图片格式,选中其图片格式后,以后使用该图片时,HyperSnap-DX作为其默认查看器。如果要在同一窗口中打开每个文件,则选中“在同一窗口中打开每个文件”,否则选中“使用新窗口打开新文件”。最后单击“确定”按钮,使注册文件类型生效。注册了图片的类型,在“资源管理器”中直接双击图像文件,即可进行浏览。
34.在捕捉的图像上添加文字
有些时候需要在捕捉的图像上添加一些说明文字,HyperSnap-DX中也提供了这一功能:抓取图像后,单击左边绘图工具栏上的大写字母A,在图像上拖动鼠标,选择合适的矩形区域,然后释放鼠标,在弹出的文本工具对话框中输入文字。然后在“文本工具”对话框中单击“字体/颜色”按钮可以设置字体的颜色和字体的样式。同样,在HyperSnap-DX中也提供了文字的左对齐、居中和右对齐,其操作跟在Word中的操作相同。
小提示
★如果没有看见该工具栏,则可以在显示菜单下,单击“绘图工具栏”,在HyperSnap-DX窗口上显示绘图工具箱。
★在“文本工具”对话框中输入文字后,不关闭该对话框,将鼠标放到已输入文字的图片上,然后使用鼠标移动文字框,可以调整输入文字到一个最恰当的位置。
35.直接从外部设备中获得图像
通过“文件”→“获取”命令可以直接从扫描仪或数码相机获得图像。
36.转换文件格式
先打开一个图像文件,再选择“文件”→“另存为”命令即可把打开的文件转换为另一种文件格式。
37.把图片设置为墙纸
选择“文件”→“打开”命令打开一幅图片,再选择“文件”→“设为墙纸”命令,打开“设为墙纸”对话框,可以在其中选择图像在桌面上的显示方式,如果要使图像在桌面上居中显示,则单击“居中”即可。如果对所设置的墙纸不满意,可以单击“去除墙纸”按钮,将所设置的墙纸去除掉。通过此法,我们可以把游戏中比较酷的画面直接抓下来设为桌面的墙纸,很好用。
38.捕捉HyperSnap-DX自身
HyperSnap-DX 虽然能捕捉别的软件画面,但不能截取自身,因为它截取的时候,都是把自身隐藏后,去截取别的软件,所以自身隐藏了,也就捕捉不到了。要截取它,方法一是同时开两个窗口,然后利用一个窗口对另一个窗口进行捕捉。在使用快捷键时需要在不捕捉的窗口中取消激活快捷键,而另一个则激活快捷键。
方法二是使用快捷键“Print Screen Sys Rq”能够将现在正在活动的窗口截取下来,这也包括它自身,这或许是截取它自己的惟一办法,但这个快捷键有很多的好处,任何活动的画面它都可以及时地截取下来,很方便,要多用。
39.捕捉多级菜单
在有些特殊情况下需要捕捉多级菜单,比较原始得捕捉方法是使用键盘快捷键“Print Screen”将整个画面都捕捉到剪贴板上,然后再进行一些手工的编辑。这样使用起来比较麻烦,而在HyperSnap-DX中就直接提供了多级菜单的捕捉。多级菜单捕捉的缺省快捷键是“Ctrl+Shift+M”,下面我们以捕捉Winamp的多级菜单为例来说明如何捕捉多级菜单。运行HyperSnap-DX,在选项菜单上选择“激活快捷键”命令,然后最小化程序HyperSnap-DX。在Winamp窗口上展开多级窗口到最低级的菜单,然后按下快捷键“Ctrl+Shift+M”,使用鼠标单击第一级菜单,接着单击第二级菜单,然后再单击最后一级菜单,最后单击回车键,就将图像捕捉下来了。
40.放大图像的注意点
HyperSnap-DX 虽然能将图像放大,但它不具备自动填充的功能,当图像放大 200% 以上时,就会产生明显的失真,建议大家最好不要过分运用放大功能,当然缩小图像是没有问题的。
41.抓取灰度图
一般我们抓图都是抓取真彩图片,但很多报刊杂志在排版时采用的是灰度图,在HyperSnap中抓到图后,在存盘前,注意选择一下“颜色”→“灰度”命令即可把当前图片转为灰度图,再存盘即可。
小提示
当然,如果编辑明确规定需要真彩图片,那可千万不要转化了
另外,团IDC网上有许多产品团购,便宜有口碑
linux下怎么安装Go开发环境
一、Go安装使用
1、下载Go源码包
上传到/usr/local/src目录下
2、编译安装Go到/usr/local
tar zxvf go1.6.3.linux-amd64.tar.gz -C /usr/local/
#注:必须使用root账户或者使用sudo来解压缩Go源码包
3、设置PATH环境变量,添加/usr/local/go/bin到环境变量
export PATH=$PATH:/usr/local/go/bin
4、安装到自定义位置
Go二进制文件默认安装到/usr/local/go,但是可以安装Go工具到不同的位置,可以自行定义,只需要设置正确的环境变量。
例如,安装Go到家目录下,必须添加环境变量到$HOME/.profile
export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin
注:安装Go到其他目录时,GOROOT必须设置为环境变量
5、检查是否正确安装程序
通过设置一个工作区和建立一个简单的程序,检查是否正确安装了一个简单的程序。创建一个目录包含您的工作空间,例如/data/work,并设置GOPATH环境变量指向的位置。
export GOPATH=/data/work
#如果不存在/data/work,需要新建
然后,在你的工作内创建src/github.com/user/hello,如果使用github,可以使用自己的用户名代替user,在hello目录下,新建hello.go
# cat hello.go
package main
import "fmt"
func main {
fmt.Printf("hello,world!\n")
}
#使用go编译hello.go
go install github.com/user/hello
#上面的命令讲名叫hello(or hello.exe)的程序放到你的工作区内,执行下面命令,会得到输出结果。
$GOPATH/bin/hello
hello,world!
#当出现hello,world!表明Go已经安装成功可以工作。
二、Go工作区介绍
1、机构组织代码概述
Go语言程序通常将所有的代码保存在一个工作区中。
工作区包含许多版本控制库(由Git管理)。
每个存储库包含一个或多个包。
每个包由一个或多个在一个目录中的源文件组成。
一个包的目录的路径决定其导入路径。
注:同于其他的编程环境中,每一个项目都有一个独立的工作区且工作区是紧密联系在一起的版本控制库。
2、工作区介绍
工作区是一个目录层次结构,它的根目录有三个目录:
src 包含Go源文件
pkg 包含对象和包
bin 包含可执行命令
Go工具创建源码包并安装二进制文件到pkg和bin目录下
src目录通常包含多个版本控制库(如Git或Mercurial),跟踪一个或多个源包的开发。
下面展示一个好的工作区的例子:
bin/
hello # command executable
outyet # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package object
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
... (many more repositories and packages omitted) ...
上面的属性图展示了一个包含两个存储库(example和image)的工作区,example 存储库包含两个命令(hello,outyet),image库包含bmp包和几个其他的包。
一个典型的工作区包含包含许多软件包和命令的多个源库。大多数程序员将所有的源代码和依赖关系保存在一个工作区中
3、GOPATH环境变量设置
GOPATH环境变量指定工作区的位置。它很可能是唯一的环境变量,代码开发时需要设置。
开始,创建一个工作区目录并设置相应的gopath。您的工作区可以位于任何你喜欢的地方,但我们将在这个文档中使用/data/work。请注意,这不能是您的“Go安装”路径相同。
mkdir -p /data/work
export GOPATH=/data/work
为了方便。添加工作区的bin到PATH中
export PATH=$PATH:$GOPATH/bin
4、导入路径
一个导入路径是唯一标识一个包的字符串。一个包的导入路径对应于它在工作区内或远程存储库中的位置。
从标准库的软件包中给出了短的导入路径等。对于您自己的包,您必须选择不可能和未来添加到标准库或其他外部库的基础路径冲突的路径。
注意,你不需要将你的代码发布到一个远程存储库之前,你可以建立它。这只是一个很好的习惯来组织你的代码,如果你有一天会出版它。在实践中,你可以选择任何任意的路径名称,只要它是唯一的标准库和更大的去生态系统。
我们将使用github.com/user作为我们的基本路径。在您的工作区中创建一个目录,以保持源代码:
mkdir -p $GOPATH/src/github.com/user
5、第一个项目
编译并运行一个简单的程序,首先选择一个包的路径(我们将使用github.com/user/hello)和创建在您的工作区相应的软件包目录:
mkdir $GOPATH/src/github.com/user/hello
创建名叫hello.go的文件,上面创建过,此处略过。
cd $GOPATH/src/github.com/user/hello
go install
$GOPATH/bin/hello
或者:
hello
如果你使用的是一个源代码管理系统,现在是一个很好的时间来初始化一个存储库,添加文件,并提交你的第一次更改。再次,这一步是可选的:您不需要使用源代码管理来写代码。
cd $GOPATH/src/github.com/user/hello
git init
Initialized empty Git repository in /data/work/src/github.com/user/hello/.git/
git add hello.go
git commit -m "first commit"
[master (root-commit) bbfb477] first commit
6、first library
mkdir $GOPATH/src/github.com/user/stringutil
下一步,在目录下创建一个名为reverse.go文件中有下列内容:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
使用go build测试包的编译
$ go build github.com/user/stringutil
如果当前位置源码包目录,只需要:
go build
上面操作并不会产生一个输出文件,必须使用go install,把包和对象输出到工作去的pkg目录内
确认stringutil包创建完成后,修改原始hello.go,使用stringutil包:
package main
import (
"fmt"
"github.com/user/stringutil"
)
func main() {
fmt.Printf(stringutil.Reverse("\n !oG ,olleH"))
}
无论使用go安装包还是二进制文件,所有相关的依赖都会自动安装。所以当你安装hello程序时:
$ go install github.com/user/hello
对应的stringutil包会自动安装好。
执行新的hello程序,可以看到消息已经被反转
# hello
Hello, Go!
完成上面操作之后,工作区应该为:
├── bin
│ └── hello # command executable
├── pkg
│ └── linux_amd64 # this will reflect your OS and architecture
│ └── github.com
│ └── user
│ └── stringutil.a # package object
└── src
└── github.com
└── user
├── hello
│ └── hello.go # command source
└── stringutil
└── reverse.go # package source
注意:go install会把库文件stringutil.a放到pkg/linux_amd64下边(目录结构跟源代码结构一样)。这样可以go命令可以直接找到对应的包对象,避免不必要的重复编译。linux_amd64是为了根据操作系统和你的系统架构交叉编译。
所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库)。
7、包命令
所有的Go源代码都以下面的语句开始:
package name
其中name就是包引用默认的名称,一个包中的所有文件必须使用同一个包名,可执行命令必须是main。
一个二进制文件下所有的包名不需要唯一,但是引用路径必须唯一
8、测试
Go自带了一个轻量级的测试框架,由go test和testing包组成。
可以通过新建xx_test.go写一个测试,其中包含若干个TestXXX函数。测试框架会自动执行这些函数;如果函数中包含tError或t.Fail, 对应的测试会被判为失败。
添加一个针对stringutil的测试文件$GOPATH/src/github.com/user/stringutil/reverse_test.go,包含以下内容:
package stringutil
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
}{
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世,olleH"},
{"", ""},
}
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
}
}
}
#通过go test测试
# go test github.com/user/stringutil
ok github.com/user/stringutil 0.002s
#同样的,在包文件夹下可以忽略路径而直接执行go test
[root@zabbix stringutil]# go test
PASS
ok github.com/user/stringutil 0.002s
9、远程包
包的引用路径用来描述如何通过版本控制系统获取包的源代码。go工具通过引用路径自动从远程代码仓库获取包文件。比如本文中用的例子也对应的保存在github.com/golang/example下。go可以通过包的代码仓库的url直接获取、生成、安装对应的包。
[root@zabbix ~]# go get github.com/golang/example/hello
[root@zabbix ~]# $GOPATH/bin/hello
Hello, Go examples!
如果工作区中不存在对应的包,go会将对应的包放到GOPATH环境变量指明的工作区下。(如果包已经存在,go跳过代码拉去而直接执行go install)
建议详细看一下这个,有图文
分享名称:go语言bmp图片 golang bmp
文章URL:http://hbruida.cn/article/ddoeogi.html