⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtkbmp_open.c

📁 利用linux的GTK
💻 C
字号:
#include <gtk/gtk.h>#include <stdlib.h>#include <stdio.h>typedef struct{gint IMAGE_WIDTH;gint IMAGE_HEIGHT;guchar *IMAGE_DATA;}bmpinfo;gboolean on_darea_expose (GtkWidget *widget,		 GdkEventExpose *event,		 gpointer user_data){	bmpinfo *bmpfile;	bmpfile=user_data;  gdk_draw_rgb_image (widget->window, widget->style->fg_gc[GTK_STATE_NORMAL],		     0,0,bmpfile->IMAGE_WIDTH, bmpfile->IMAGE_HEIGHT,		      GDK_RGB_DITHER_MAX,bmpfile->IMAGE_DATA ,bmpfile->IMAGE_WIDTH * 3);  return TRUE;}bmpinfo* loadbmp(char *filename){	FILE *infile;	bmpinfo *bmpfile;    unsigned char  Head[54];	unsigned long i,j,k,p;	unsigned char  bt0,bt1,bt2;  	guchar *rgbbuf,*rgbbuf2;	unsigned long datasize;	unsigned char stuff[4];	infile=fopen(filename,"rb+");  	if(infile==NULL)  	{   		g_print("Open 24 bit bitmap file failed!");  		return NULL;  	}	bmpfile=(bmpinfo *)malloc(sizeof(bmpinfo));  	fread(Head,54,1,infile);   	bmpfile->IMAGE_WIDTH=*(Head+18)+(*(Head+19))*256;	bmpfile->IMAGE_HEIGHT=*(Head+22)+(*(Head+23))*256;	datasize=bmpfile->IMAGE_WIDTH*bmpfile->IMAGE_HEIGHT*3;	p=(bmpfile->IMAGE_WIDTH*3)%4;	rgbbuf2=(guchar *)malloc(datasize);	rgbbuf=(guchar *)malloc(datasize);	  	for(i=0;i<bmpfile->IMAGE_HEIGHT;i++)     	{   		for(j=0;j<bmpfile->IMAGE_WIDTH;j++)   		{   			fread((unsigned char *)&bt0,1,1,infile);  			fread((unsigned char *)&bt1,1,1,infile);  			fread((unsigned char *)&bt2,1,1,infile);  			*(rgbbuf2+i*bmpfile->IMAGE_WIDTH*3+j*3+0)= bt2;     		*(rgbbuf2+i*bmpfile->IMAGE_WIDTH*3+j*3+1)= bt1;  			*(rgbbuf2+i*bmpfile->IMAGE_WIDTH*3+j*3+2)= bt0;  		}   		if(p!=0) fread(stuff,1,(4-p),infile); 	}	for(i=0,k=bmpfile->IMAGE_HEIGHT-1;i<bmpfile->IMAGE_HEIGHT;i++,k--)    	{   		for(j=0;j<bmpfile->IMAGE_WIDTH;j++)		{  			*(rgbbuf+i*bmpfile->IMAGE_WIDTH*3+j*3+0)= *(rgbbuf2+k*bmpfile->IMAGE_WIDTH*3+j*3+0);     		*(rgbbuf+i*bmpfile->IMAGE_WIDTH*3+j*3+1)= *(rgbbuf2+k*bmpfile->IMAGE_WIDTH*3+j*3+1);  			*(rgbbuf+i*bmpfile->IMAGE_WIDTH*3+j*3+2)= *(rgbbuf2+k*bmpfile->IMAGE_WIDTH*3+j*3+2);  		}	 	}	bmpfile->IMAGE_DATA=rgbbuf;	free(rgbbuf2);	fclose(infile);	return bmpfile;}int main (int argc, char *argv[]){  	GtkWidget *window, *darea;	bmpinfo *bmpfile;	gtk_init (&argc, &argv);  	if(argc!=2){		printf("Usage:%s bmpimage\n",argv[0]);		return 1;	}		  /* Set up the RGB buffer. */	bmpfile=loadbmp(argv[1]);	if(bmpfile==NULL)	{		g_print("load image failed!\n");		return 1;	}		window = gtk_window_new (GTK_WINDOW_TOPLEVEL);  	darea = gtk_drawing_area_new ();		gtk_widget_set_size_request (darea, bmpfile->IMAGE_WIDTH,bmpfile->IMAGE_HEIGHT);  	gtk_container_add (GTK_CONTAINER (window), darea);	  	gtk_signal_connect (GTK_OBJECT (darea), "expose-event",                      GTK_SIGNAL_FUNC (on_darea_expose),bmpfile);  	gtk_widget_show_all (window);	  	g_signal_connect(GTK_OBJECT(window),"delete_event",	G_CALLBACK(gtk_main_quit),NULL);  	gtk_main ();  	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -