Kill WriteBMP and use the very same Printscreen functions from the gtk frontend.
This means a few more code duplication but remove some ugliness. Now dev-cpp (i suppose) compilation is broken.
This commit is contained in:
parent
df1e0d6737
commit
01b3c77010
|
@ -19,7 +19,7 @@ desmume_glade_SOURCES = \
|
|||
globals.h glade-xml.cpp \
|
||||
callbacks.cpp callbacks.h callbacks_IO.cpp callbacks_IO.h \
|
||||
desmume.cpp desmume.h \
|
||||
keyval_names.cpp main.cpp printscreen.cpp gdk_gl.cpp gdk_gl.h \
|
||||
keyval_names.cpp main.cpp gdk_gl.cpp gdk_gl.h \
|
||||
dTools/callbacks_1_ioregs.cpp dTools/callbacks_2_memview.cpp \
|
||||
dTools/callbacks_3_palview.cpp dTools/callbacks_4_tileview.cpp \
|
||||
dTools/callbacks_dtools.h \
|
||||
|
|
|
@ -206,9 +206,52 @@ static void file_open() {
|
|||
}
|
||||
|
||||
void on_menu_ouvrir_activate (GtkMenuItem *menuitem, gpointer user_data) { file_open();}
|
||||
void on_menu_pscreen_activate (GtkMenuItem *menuitem, gpointer user_data) { WriteBMP("./test.bmp",(u16*)GPU_screen); }
|
||||
void on_menu_quit_activate (GtkMenuItem *menuitem, gpointer user_data) { gtk_main_quit(); }
|
||||
|
||||
#define SCREENS_PIXEL_SIZE 98304
|
||||
|
||||
static void Printscreen()
|
||||
{
|
||||
GdkPixbuf *screenshot;
|
||||
gchar *filename;
|
||||
GError *error = NULL;
|
||||
u8 *rgb;
|
||||
static int seq = 0;
|
||||
|
||||
rgb = (u8 *) malloc(SCREENS_PIXEL_SIZE*3);
|
||||
if (!rgb)
|
||||
return;
|
||||
for (int i = 0; i < SCREENS_PIXEL_SIZE; i++) {
|
||||
rgb[(i * 3) + 0] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 0) & 0x1f) << 3;
|
||||
rgb[(i * 3) + 1] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 5) & 0x1f) << 3;
|
||||
rgb[(i * 3) + 2] = ((*((u16 *)&GPU_screen[(i<<1)]) >> 10) & 0x1f) << 3;
|
||||
}
|
||||
|
||||
screenshot = gdk_pixbuf_new_from_data(rgb,
|
||||
GDK_COLORSPACE_RGB,
|
||||
FALSE,
|
||||
8,
|
||||
256,
|
||||
192*2,
|
||||
256*3,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
filename = g_strdup_printf("./desmume-screenshot-%d.png", seq);
|
||||
gdk_pixbuf_save(screenshot, filename, "png", &error, NULL);
|
||||
if (error) {
|
||||
g_error_free (error);
|
||||
g_printerr("Failed to save %s", filename);
|
||||
} else {
|
||||
seq++;
|
||||
}
|
||||
|
||||
free(rgb);
|
||||
g_object_unref(screenshot);
|
||||
g_free(filename);
|
||||
}
|
||||
void on_menu_pscreen_activate (GtkMenuItem *menuitem, gpointer user_data) { Printscreen(); }
|
||||
|
||||
|
||||
/* MENU SAVES ***** ***** ***** ***** */
|
||||
void on_loadstateXX_activate (GtkMenuItem *m, gpointer d) {
|
||||
|
|
|
@ -131,9 +131,6 @@ void black_screen ();
|
|||
void edit_controls();
|
||||
void init_joy_labels();
|
||||
|
||||
/* printscreen.c */
|
||||
int WriteBMP(const char *filename,u16 *bmp);
|
||||
|
||||
/* keyvalnames.c -see <gdk/gdkkeysyms.h>- */
|
||||
const char * KEYNAME(int k);
|
||||
void init_keyvals();
|
||||
|
|
|
@ -1,108 +0,0 @@
|
|||
/* printscreen.c - this file is part of DeSmuME
|
||||
*
|
||||
*
|
||||
* This file is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This file is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
* Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "globals.h"
|
||||
|
||||
/////////////////////////////// PRINTSCREEN /////////////////////////////////
|
||||
// TODO: improve (let choose filename, and use png)
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u32 header_size;
|
||||
s32 width;
|
||||
s32 height;
|
||||
u16 r1;
|
||||
u16 depth;
|
||||
u32 r2;
|
||||
u32 size;
|
||||
s32 r3,r4;
|
||||
u32 r5,r6;
|
||||
}BmpImageHeader;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
u16 type;
|
||||
u32 size;
|
||||
u16 r1, r2;
|
||||
u32 data_offset;
|
||||
}BmpFileHeader;
|
||||
|
||||
|
||||
int WriteBMP(const char *filename,u16 *bmp){
|
||||
BmpFileHeader fileheader;
|
||||
BmpImageHeader imageheader;
|
||||
size_t elems_written = 0;
|
||||
|
||||
fileheader.size = 14;
|
||||
fileheader.type = 0x4D42;
|
||||
fileheader.r1 = 0;
|
||||
fileheader.r2=0;
|
||||
fileheader.data_offset = 14+40;
|
||||
|
||||
imageheader.header_size = 40;
|
||||
imageheader.r1 = 1;
|
||||
imageheader.depth = 24;
|
||||
imageheader.r2 = 0;
|
||||
imageheader.size = 256 * 192*2 * 3;
|
||||
imageheader.r3 = 0;
|
||||
imageheader.r4 = 0;
|
||||
imageheader.r5 = 0;
|
||||
imageheader.r6 = 0;
|
||||
imageheader.width = 256;
|
||||
imageheader.height = 192*2;
|
||||
|
||||
FILE *fichier = fopen(filename,"wb");
|
||||
if (!fichier)
|
||||
return 0;
|
||||
|
||||
elems_written += fwrite( &fileheader.type, sizeof(fileheader.type), 1, fichier);
|
||||
elems_written += fwrite( &fileheader.size, sizeof(fileheader.size), 1, fichier);
|
||||
elems_written += fwrite( &fileheader.r1, sizeof(fileheader.r1), 1, fichier);
|
||||
elems_written += fwrite( &fileheader.r2, sizeof(fileheader.r2), 1, fichier);
|
||||
elems_written += fwrite( &fileheader.data_offset, sizeof(fileheader.data_offset), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.header_size, sizeof(imageheader.header_size), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.width, sizeof(imageheader.width), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.height, sizeof(imageheader.height), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.r1, sizeof(imageheader.r1), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.depth, sizeof(imageheader.depth), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.r2, sizeof(imageheader.r2), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.size, sizeof(imageheader.size), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.r3, sizeof(imageheader.r3), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.r4, sizeof(imageheader.r4), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.r5, sizeof(imageheader.r5), 1, fichier);
|
||||
elems_written += fwrite( &imageheader.r6, sizeof(imageheader.r6), 1, fichier);
|
||||
int i,j;
|
||||
for(j=0;j<192*2;j++)for(i=0;i<256;i++){
|
||||
u8 r,g,b;
|
||||
u16 pixel = bmp[i+(192*2-j)*256];
|
||||
r = pixel>>10;
|
||||
pixel-=r<<10;
|
||||
g = pixel>>5;
|
||||
pixel-=g<<5;
|
||||
b = pixel;
|
||||
r*=255/31;
|
||||
g*=255/31;
|
||||
b*=255/31;
|
||||
elems_written += fwrite(&r, 1, sizeof(char), fichier);
|
||||
elems_written += fwrite(&g, 1, sizeof(char), fichier);
|
||||
elems_written += fwrite(&b, 1, sizeof(char), fichier);
|
||||
}
|
||||
fclose(fichier);
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue