c怎么获取屏幕像素|Windows下用C语言如何获取屏幕当前的分辨率
绝绝子16人阅读
1. linux下怎么用c语言获取一帧屏幕图像数据,怎么分块
如果已经映射了的话,理论上应该是直接可以memcpy的,这个方法你可以尝试一下
图像分块其实很简单,帧数据说白了就是一个很大的数组,你可以理解为二维数组
对二维数组进行切分很简单吧。
2. C#怎么获取屏幕分辨率
Rectangle rect = new Rectangle();rect = Screen.GetWorkingArea(this);rect.Width;//屏幕宽rect.Height;//屏幕高
3. C#获取屏幕指定像素颜色值
可以利用原生态的API方法来实现,通过GetDC获取屏幕DC,然后通过GetPixel获取点的颜色。代码如下:
///<summary>///获取指定窗口的设备场景///</summary>///<paramname="hwnd">将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC</param>///<returns>指定窗口的设备场景句柄,出错则为0</returns>[DllImport("user32.dll")]publicstaticexternIntPtrGetDC(IntPtrhwnd);///<summary>///释放由调用GetDC函数获取的指定设备场景///</summary>///<paramname="hwnd">要释放的设备场景相关的窗口句柄</param>///<paramname="hdc">要释放的设备场景句柄</param>///<returns>执行成功为1,否则为0</returns>[DllImport("user32.dll")](IntPtrhwnd,IntPtrhdc);///<summary>///在指定的设备场景中取得一个像素的RGB值///</summary>///<paramname="hdc">一个设备场景的句柄</param>///<paramname="nXPos">逻辑坐标中要检查的横坐标</param>///<paramname="nYPos">逻辑坐标中要检查的纵坐标</param>///<returns>指定点的颜色</returns>[DllImport("gdi32.dll")](IntPtrhdc,intnXPos,intnYPos);使用:publicColorGetColor(intx,inty){IntPtrhdc=GetDC(IntPtr.Zero);uintpixel=GetPixel(hdc,x,y);ReleaseDC(IntPtr.Zero,hdc);Colorcolor=Color.FromArgb((int)(pixel&0x000000FF),(int)(pixel&0x0000FF00)>>8,(int)(pixel&0x00FF0000)>>16);returncolor;}
4. 如何用C语言获取显示器尺寸
ncurse库里面有相关的功能可以获取显示器的尺寸!
5. 如何用C语言(C++)读取位图的像素点RGB信息
pData里面保存的就是一个一个的COLORREF结构,你只需要通过BITMAPINFOHEADER中的宽高等信息,计算位移,就可以读取某个点的RGB值了。还有一个简单的办法,你之前已经有memBitmap这个CBitmap了,通过这个做更方便。通过SelectObject将memBitmap放到一个CDC中,直接使用函数GetPixel函数就可以获取指定某个点的RGB值了,这个不需要计算和位移。
6. 请问,linux下C/C++怎么获取屏幕分辨率(不使用Qt和GTK)
把这个程序运行下字符终端下到分辨率就出来了。#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <linux/fb.h>#include <sys/mman.h>#include <math.h> int w,h ,bpp;int *fbmem;int main(int argc , char *argv[]) { int fd; struct fb_var_screeninfo fb_var;fd = open("/dev/fb0",O_RDWR); // //screen w , h , bpp //get screen information ioctl (fd,FBIOGET_VSCREENINFO,&fb_var); w = fb_var.xres; h = fb_var.yres; bpp = fb_var.bits_per_pixel; printf ("Framebuffer %d*%d-%dbpp\n",w,h,bpp); //fbmem = Framebuffer address fbmem = mmap (0,w*h*bpp/8,PROT_WRITE|PROT_READ, MAP_SHARED,fd,0); //y = 10,x = 200, color = 0xF800; return 0;} 如有问题联系我!
7. c++如何获得显示屏分辨率
你在DOS命令窗直接打命令:wmic DESKTOPMONITOR get screenwidth, screenheight就有分辨率了,例如,显示:ScreenHeight ScreenWidth768 1024 写c/c++程序,可以用:system("wmic DESKTOPMONITOR get screenwidth, screenheight"); 图片大小和窗口一致 -- 这是平时说的Full-Screen (满频)。程序里需要计算和安排的。
8. Windows下用C语言如何获取屏幕当前的分辨率
#include<windows.h>直接调用windows API函数GetSysTemMetrics()参数参考MSDN,可以获得屏幕H方向和V方向的像素
9. C语言打开图像文件后读取像素
C语言打开图像文件后运用以下代码就可以读取像素,具体如下:#ifndef IMAGE_H#define IMAGE_Hvoid 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文件#include<stdio.h>#include<stdlib.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 (times<3) { 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 (times<3) { 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文件#include<stdio.h>#include<stdlib.h>#include<math.h>#include"image.h"//灰度化void image_gray(){ int i,j; unsigned char tmp; for (i=0;i<bmp.biHeight;i++) { for (j=0;j<line_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;i<bmp.biHeight;i++) { for (j=0;j<line_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;i<bmp.biHeight;i++) { for (j=0;j<line_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;i<bmp.biHeight;i++) { for (j=0;j<line_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;i<bmp.biHeight;i++) { for (j=0;j<line_byte/3;j++) { imagedata[i*line_byte+3*j]=0; imagedata[i*line_byte+3*j+2]=0; } } } else { for (i=0;i<bmp.biHeight;i++) { for (j=0;j<line_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;i<bmp.biHeight;i++) { for (j=0;j<line_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文件#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.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;}
10. c语言屏幕分辨率代码
单是C 库的话好象最大才是640x480.
评论 | 0 条评论
登录之后才可留言,前往登录