Bilder integrieren aber KEINE ressourcen!



  • Hi, ich habe mir in letzter Zeit einige Anwendungen angesehen und habe mich gefragt, wie die es schaffen, Bitmaps / oder andere Bildtypen mit der Anwendung mitzuliefern, sie aber nicht in den Ressourcen abzuspeichern. Ich habe mir mit dem Tool "Resource Hacker" die Ressourcen der Anwendungen angesehen, jedoch habe ich dort keinen Bereich für Bitmaps gefunden. Gibt es also einen anderen Weg, die Bilder zu integrieren, jedoch nicht als Ressource behandelt werden?

    (Es ist nur die exe-Datei, keine anderen Dateien werden mitgeliefert)



  • einfach innen array dumpen?

    unsigned char *buffer;
    
    int main(int argc, char *argv[])
    {
    	int fd_size;
    	FILE *source,*dest;
    	int i;
    
    	if(argc != 4) {
    		printf("bin2c - Usage: bin2c infile outfile label\n\n");
    		return 1;
    	}
    
    	if((source=fopen( argv[1], "rb")) == NULL) {
    		printf("Error opening %s for reading.\n",argv[1]);
    		return 1;
    	}
    
    	fseek(source,0,SEEK_END);
    	fd_size = ftell(source);
    	fseek(source,0,SEEK_SET);
    
    	buffer = malloc(fd_size);
    	if(buffer == NULL) {
    		printf("Failed to allocate memory.\n");
    		return 1;
    	}
    
    	if(fread(buffer,1,fd_size,source) != fd_size) {
    		printf("Failed to read file.\n");
    		return 1;
    	}
    	fclose(source);
    
    	if((dest = fopen(argv[2],"w+")) == NULL) {
    		printf("Failed to open/create %s.\n",argv[2]);
    		return 1;
    	}
    
    	fprintf(dest, "#ifndef __%s__\n", argv[3]);
    	fprintf(dest, "#define __%s__\n\n", argv[3]);
    	fprintf(dest, "static unsigned int size_%s = %d;\n", argv[3], fd_size);
    	fprintf(dest, "static unsigned char %s[] __attribute__((aligned(16))) = {", argv[3]);
    
    	for(i=0;i<fd_size;i+=1) {
    		if((i % 16) == 0) fprintf(dest, "\n\t");
    		fprintf(dest, "0x%02x, ", buffer[i]);
    	}
    
    	fprintf(dest, "\n};\n\n#endif\n");
    
    	fclose(dest);
    
    	return 0;
    }
    


  • was er meint, ist dass sie Bilder in der Exe Datei sind, ohne eine Ressource zu sein.

    Möglichkeit 1: vielleicht ist das Bild nicht als bitmap ressource eingebunden, sondern als Datenressource (RT_RCDATA zB weils ein png oder jpg ist)
    Möglichkeit 2: Vielleicht wurde das Bild in den Quellcode includiert über einen File mit einem Großen unsigned char array (es gibt tools, die erzeugen zu einer beliebigen Datei ein c-File, dass du compilieren und dazulinken kannst). Sowas würde ich aber vermeiden und nur benutzen, wenn das System, für das du etwas kompilierst, so was wie Ressourcen nicht bietet (zB irgend ein Embedded System).

    Edit:
    Ok, jetzt wo ich mir ascda's code anschaue, sehe ich, dass es genau so ein programm ist, was ich unter Möglichkeit 2 meine.



  • Ne also von der Exe ist es wirklich nur einmal diese Manifestressource und diese Icon / Cursor Ordner sonst ist da nichts drin. Das mit dem Array habe ich probiert und es klappt auch ganz gut. Warum sollte ich das denn vermeiden? Der Vorteil ist eben, dass man die Bitmaps von außen nicht durch z.B. den Res-Hacker bekommt.



  • vielleicht findet jemand die Grafiken deines Tools doof und würde sie gern austauschen.



  • ich mach aber ganz gut grafiken xD

    ne aber wenns keine probleme von wegen performance - fehleranfälligkeit oder funktionalität auf allen systemen geht ist es doch ok ^^



  • Was mir nach längerem Nachdenken in den Sinn kam:
    Man kann Bilder auch von Servern laden! Hatte da mal nen Tut irgendwi gesehen.



  • Einfach hinten an die Exe dranhängen.



  • Es hat sich herausgestellt, dass das .NET-Anwendungen waren. Da läuft es anscheinend mit den Ressourcen anders ab.


Anmelden zum Antworten