Хех, дело в общем не в том что мне действительно нужно спрятать, просто гуи кросплатформенное,
то что картинки в линуксе лежат где им положено меня не напрягает,
ну а вот в винде как-то нехорошо, со своим уставом в чужой огород не лезут,
хочу чтобы всё было в запускном файлике.
Предложения положить картинки рядом или создать каталог отклоняются.
Приходило в голову гимпом сохранять в H файлик и как-то замутить, но
что-то уж больно ручной труд %)
Есть решение?
Как скрыть ресурсы gtk+glade приложения?
Модератор: Модераторы разделов
-
Serik
- Сообщения: 149
- ОС: SuSE Linux
Re: Как скрыть ресурсы gtk+glade приложения?
В GTK+ для этого есть gdk-pixbuf-csource.
-
Serik
- Сообщения: 149
- ОС: SuSE Linux
Re: Как скрыть ресурсы gtk+glade приложения?
Для преобразования Glade-файла в массив на С написал маленькую программку на Perl.
Все это вызывается из Makefile.
Все это вызывается из Makefile.
-
_edgbla_
- Сообщения: 13
- ОС: OpenSUSE
Re: Как скрыть ресурсы gtk+glade приложения?
Спасибо, заюзал gdk-pixbuf-csource, немного неудобно что руками много
, ну чтож терь.
Програмкой поделишься? если не жалко конечно.
Програмкой поделишься? если не жалко конечно.
-
Serik
- Сообщения: 149
- ОС: SuSE Linux
Re: Как скрыть ресурсы gtk+glade приложения?
bin2hex.pl
В Makefile выглядит так
Код:
# convert binary file to hex
use Getopt::Long;
# config variable ########################################
$version = '2007-11-27';
%p = ('file' => '',
'do' => 'help',
'strlen' => 14
);
################################################################
# run
&main(\%p);
################################################################
sub main
{
my $p = shift;
&init_param($p);
if (length($p->{'file'}) > 0) {do_file($p); exit(0);}
if ($p->{'help'} || $p->{'do'} eq 'help') {do_help($p); exit(0);}
}
################################################################
sub init_param
{
my $p = shift;
GetOptions("help" => \($p->{'help'}),
"file=s" => \($p->{'file'}),
"strlen=i" => \($p->{'strlen'})
);
# Check parametrs
}
################################################################
sub do_help
{
my $p = shift;
print("File converter bin -> hex Version:$version\n");
print("Usage: .pl [option]\n");
print("Option are:\n");
print(" --help list help\n");
print(" --do \n");
return (1);
}
################################################################
sub do_file
{
my $p = shift;
my ($f, $s, $v, $c, $first);
open($f,"<".$p->{'file'});
if (!$f)
{
return (-1);
}
binmode($f);
# seek ($f,0,2);
# $ret = tell($f);
$c = 0;
$first = 1;
while(read($f,$s,1))
{
if ($first == 1) {$first = 0;}
else {print (",");}
$v = unpack("C",$s);
printf("0x%02x",$v); # 2 знака в hex
if ($p->{'strlen'} > 0 && $c >= $p->{'strlen'})
{
printf("\n");
$c = 0;
}
$c = $c + 1;
} # while
close($f);
return (1);
}
################################################################В Makefile выглядит так
Код:
# resource
resource.o: resource.cpp
$(CC) resource.cpp -c -o resource.o $(CGTK)
resource.cpp: planaris.glade pixmap/secwin.png
echo "#include <gtk/gtk.h>" > resource.cpp
echo "const char gladexml[] = {" >> resource.cpp
perl -w bin2hex.pl --file planaris.glade >> resource.cpp
echo "};" >> resource.cpp
echo "const char *pgladexml=&gladexml[0];">> resource.cpp
echo "unsigned int sgladexml = sizeof(gladexml);" >> resource.cpp
gdk-pixbuf-csource --raw --name=secwin pixmap/secwin.png >>resource.cpp
echo "const guint8 *psecwin = &secwin[0];" >> resource.cpp
-
_edgbla_
- Сообщения: 13
- ОС: OpenSUSE
Re: Как скрыть ресурсы gtk+glade приложения?
Благодарю, всё в лучшем виде, использую xpm в качестве картинок, так как весит меньше,
а для файлика glade переписал твой год на "С", чтобы не надо было его хранить в том же каталоге
или указывать путь, а просто бросить в /home/user/bin/
xpm подключается как "H" файлик и юзается так:
Переписанный на "C" bin2hex:
а для файлика glade переписал твой год на "С", чтобы не надо было его хранить в том же каталоге
или указывать путь, а просто бросить в /home/user/bin/
xpm подключается как "H" файлик и юзается так:
Код: Выделить всё
GtkWidget *widget;
GdkPixbuf *gdkpixbuf;
widget = glade_xml_get_widget( xml, "imageTest" );
gdkpixbuf = gdk_pixbuf_new_from_xpm_data( (const char**)test_xpm );
gtk_image_set_from_pixbuf( GTK_IMAGE(widget), gdkpixbuf );Переписанный на "C" bin2hex:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( int argc, char *argv[] )
{
FILE *binFile, *hexFile;
unsigned char byte;
char buf[4096];
if( argc < 2 )
{
printf( "usage: bin2hex file\n" );
exit( 1 );
}
strcpy( buf, argv[1] );
binFile = fopen( buf, "rb" );
if( !binFile )
{
printf( "File not found ( %s )\n", buf );
exit( 1 );
}
strcat( buf, ".h" );
hexFile = fopen( buf, "wb" );
if( !hexFile )
{
printf( "File not found ( %s )\n", buf );
exit( 1 );
}
while( fread( &byte, 1, 1, binFile ) > 0 )
{
fprintf( hexFile, "0x%.2x,", byte );
}
fclose( binFile );
fclose( hexFile );
return 0;
}