[WinXP] Transparante bitmap met onbekend formaat

Pagina: 1
Acties:

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
(IN WINDOWS XP)
Ik was laatst thuis bezig met wat aan te klooien in explorer.exe en toen vond ik een bitmap die op de start-menu knop wordt geplaatst. Nu wou ik die wat gaan aanpassen, maar ik krijg met geen mogelijkheid die transparante onderdelen terug.
Weet iemand hoe dat zit?
De bitmap heeft ook een andere header dan het standaard bitmap formaat.
Verder openen Corel Draw en Adobe Photoshop hem niet. Paintshop pro opent hem wel, maar kan er verder niets mee doen.
Als je het bestand zelf op wilt zoeken.
Ik gebruikte Resource Hacker om in explorer.exe te komen.
Vervolgens is de bitmap te vinden onder het kopje Bitmap/176

Weet er iemand hoe je dit onbekende bestandsformaat na kunt bootsen.

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • Willem
  • Registratie: Februari 2001
  • Laatst online: 15:34
.BMP ondersteunt geen transparency.
Bestandje van iemand anders even kopieren, neem aan dat je nog wel weet welke het was.

Motor (of auto) onderhoud bijhouden


  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Het probleem is juist dat het bestandje door microsoft geschreven is.
Het is dat vlaggetje in het startmenu onder windows xp.
Ik wil het eigenlijk editen en er zelf een logo neerzetten.
Normaal pakt windows bij BMPtjes de allereerste pixel en die dient dan als kenmerk van de transparante kleur, maar omdat deze indeling anders is klopt daar geen f*k van.

Ik was eigenlijk benieuwd of daar nog iemand mee bezig was die daar misschien een oplossing voor wist, want op de Google Discussion Groups zijn er wel een aantal vragen over te vinden, maar nog geen antwoorden. Verder lijkt het, zoals ik in HEX-mode kon zien alsof er 2 hex-getallen meer zijn per pixel.

Dus vandaar ...

Iemand nog ideeën ?

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Is er dan helemaal niemand die slim genoeg is om te weten wat het probleem is?

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • MikeN
  • Registratie: April 2001
  • Laatst online: 28-08 18:39
Rustig aan, kicken na 2 uur wordt hier niet echt gewaardeerd. Verder zijn er volgens mij genoeg sites die over het editen van explorer.exe, of niet?

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Sorry ik weet het, maar ik kan hier echt niet inkomen. Ik ben momenteel in HEX-code de hele header aan het doorlopen van de Bitmap file. De File-Header is nog logisch. Ik ben nu bij het Bitmap information gedeelte.
Ik kan hier alleen echt niet uit komen en er is niks te vinden op internet. Alleen vragen van mensen die hetzelfde probleem hebben.

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


Verwijderd

wast niet gewoon de pixel linksboven die de transp. kleur bepaald?!

  • MaDDoG
  • Registratie: Maart 2000
  • Laatst online: 24-11-2025

MaDDoG

De brakste schakel

Ik weet niet hoe ver je wilt gaan met het veranderen van je start knop, maar:
http://overclockersclub.com/xpstartbutton.shtml
"background magenta (the usual for bmp transparency" http://www.annoyances.org/exec/show/article02-029
Afbeeldingslocatie: http://www2.hku.nl/~michie0/startbutton.gif
ff snel wat gegoogled, hoop dat je er wat aan hebt.

"Computer games don't affect kids. I mean if Pacman affected us as kids,
we'd all run around in a darkened room munching pills and listening
to repetitive music."


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24

Hangloozz

{ @$%&# }

cobratbq schreef op 11 november 2002 @ 21:34:
Is er dan helemaal niemand die slim genoeg is om te weten wat het probleem is?
Ik denk dat de meeste hier juist slim genoeg zijn om daar niet aan te gaan zitten klooien ;)

www.jurgroessen.nl


Verwijderd

of hun tijd beter te besteden hebben dan aan een startbutton van windows te klooien ...

  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Ik ben intussen achter het antwoord gekomen.
Ik heb heel de Bitmap doorgekeken en dan dezelfde bitmap opnieuw opgeslagen mbv MsPaint (nooit gedacht dat ik dat programma nog eens zou gebruiken).
De nieuwe bitmap waar ik het over had is niet 24 bits, zoals de normale bitmap, maar een nieuwe variant die 32bits kleur opslaat. (volgens de nieuwe header info)
Verder lijkt de 4e byte te bepalen of het plaatje transparant is.
Ik heb zelf echter alleen nog met het start-menu een verschil gemerkt tussen de 2 bitmaps.
Ik heb intussen een programmatje geschreven om de boel om te zetten van 24 bits naar 32 bits, maar het is nie ideaal.

Ik zal hem later nog wel posten, maar verwacht er niet te veel van.

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Verwacht niet te veel van de sourcecode.
Ik heb het op een vrije dinsdag geschreven en hij moest voor m'n gevoel toch wel in één dag af zijn.

Informatie over het proggie kun je in het begin van de main-functie vinden (of als je het programma start zonder arguments)

Veel plezier, kweet niet of jullie er wat mee kunnen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int horizental, vertical;
struct HeaderItem
{
    char identifier[3];
    unsigned int FileSize;
    unsigned int reserved;
    unsigned int BitmapDataOffset;
    unsigned int BitmapHeaderSize;
    unsigned int width;
    unsigned int height;
    unsigned short planes;
    unsigned short BitsPerPixel;
    unsigned int compression;
    unsigned int BitmapDataSize;
    unsigned int HResolution;
    unsigned int VResolution;
    unsigned int colors;
    unsigned int ImportantColors;
    int NewFileLayout;
};

int retrieve_header(FILE *infile, struct HeaderItem *header);
void show_header( struct HeaderItem *header );
int write_header(FILE *outfile, struct HeaderItem *header,int adjust);
int convert_body(FILE *infile, FILE *outfile, struct HeaderItem *header);
int transparent_body(FILE *infile, FILE *outfile, struct HeaderItem *header, int blue, int green, int red, int transparent);

void main(int argc,char *argv[] )
{
    FILE *infile, *outfile;
    struct HeaderItem header;
    if( argc == 1 )
    {
        printf("info <SOURCEFILE>\nconvert <SOURCEFILE> <TARGETFILE>\ntransparent <SOURCEFILE> <TARGETFILE> <BLUE> <GREEN> <RED> <TRANSPARENT>\nBLUE = value between 0 and 255\nGREEN = value between 0 and 255\nRED = value between 0 and 255\nTRANSPARENT = 0 for total transparency, 255 for solid color");
        return;
    }


    if( strcmp(argv[1],"info") == 0 )
    {
        if( ( infile = fopen(argv[2],"rb") ) != NULL )
        {
            retrieve_header(infile,&header);
            show_header(&header);
            fclose(infile);
        }
    }
    else if( strcmp(argv[1],"convert") == 0 )
    {
        if( ( infile = fopen(argv[2],"rb") ) != NULL && ( outfile = fopen(argv[3],"wb") ) != NULL )
        {
            retrieve_header(infile,&header);
            if( convert_body(infile, outfile, &header) == -1 )
                printf("Bitmap already has new file structure");
            fclose(infile);
            fclose(outfile);
        }
    }
    else if( strcmp(argv[1],"transparent") == 0 )
    {
        if( ( infile = fopen(argv[2],"rb") ) != NULL && ( outfile = fopen(argv[3],"wb") ) != NULL && argc == 8 )
        {
            retrieve_header(infile,&header);
            if( transparent_body(infile, outfile, &header,atoi(argv[4]),atoi(argv[5]),atoi(argv[6]),atoi(argv[7])) == -1 )
                printf("Error has occurred");
            fclose(infile);
            fclose(outfile);
        }
    }
    else printf("info <SOURCEFILE>\nconvert <SOURCEFILE> <TARGETFILE>\ntransparent <SOURCEFILE> <TARGETFILE> <BLUE> <GREEN> <RED> <TRANSPARENT>\nBLUE = value between 0 and 255\nGREEN = value between 0 and 255\nRED = value between 0 and 255\nTRANSPARENT = 0 for total transparency, 255 for solid color"); 
}

void show_header( struct HeaderItem *header )
{
    printf("Identifier: %c%c\n", header->identifier[0], header->identifier[1]);
    printf("Filesize: %d\n", header->FileSize);
    printf("Reserved: %d\n", header->reserved);
    printf("BitmapDataOffset: %d\n", header->BitmapDataOffset);
    printf("BitmapHeaderSize: %d\n", header->BitmapHeaderSize);
    printf("Width: %d\n",header->width);
    printf("Height: %d\n",header->height);
    printf("Planes: %d\n",header->planes);
    printf("BitsPerPixel: %d\n",header->BitsPerPixel);
    printf("Compression: %d\n",header->compression);
    printf("BitmapDataSize: %d\n",header->BitmapDataSize);
    printf("HResolution: %d\n",header->HResolution);
    printf("VResolution: %d\n",header->VResolution);
    printf("Colors: %d\n",header->colors);
    printf("ImportantColors: %d\n",header->ImportantColors);
    printf("New File Layout: %d\n", header->NewFileLayout);
}

int retrieve_header(FILE *infile, struct HeaderItem *header)
{
    int step = 0, ReadLoop = 1;
    
    while(ReadLoop)
    {
        switch(step)
        {
        case 0:
            fread(header->identifier, sizeof(char), 2, infile);
            header->identifier[2] = '\0';
            step = 1;
            break;
        case 1:
            fread(&header->FileSize, sizeof(int), 1, infile);
            step = 2;           break;
        case 2:
            fread(&header->reserved, sizeof(int), 1, infile);
            step = 3;
            break;
        case 3:
            fread(&header->BitmapDataOffset, sizeof(int), 1, infile);
            step = 4;
            break;
        case 4:
            fread(&header->BitmapHeaderSize, sizeof(int), 1, infile);
            step = 5;
            break;
        case 5:
            fread(&header->width, sizeof(int), 1, infile);
            horizental = header->width;
            /* for horizental data byte must be 4's multibple */
            /* those added bytes have no meaning */
            if((horizental % 4) != 0)
            horizental += 4 - ! (horizental % 4);
            step = 6;
            break;
        case 6:
            fread(&header->height, sizeof(int), 1, infile);
            vertical = header->height;
            step = 7;
            break;
        case 7:
            fread(&header->planes, sizeof(short), 1, infile);
            step = 8;
            break;
        case 8:
            fread(&header->BitsPerPixel, sizeof(short), 1, infile);
            step = 9;
            break;
        case 9:
            fread(&header->compression, sizeof(int), 1, infile);
            step = 10;
            break;
        case 10:
            fread(&header->BitmapDataSize, sizeof(int), 1, infile);
            step = 11;
            break;
        case 11:
            fread(&header->HResolution, sizeof(int), 1, infile);
            step = 12;
            break;
        case 12:
            fread(&header->VResolution, sizeof(int), 1, infile);
            step = 13;
            break;
        case 13:
            fread(&header->colors, sizeof(int), 1, infile);
            step = 14; break;
        case 14:
            fread(&header->ImportantColors, sizeof(int), 1, infile);
            ReadLoop = 0;
            break;

        default:
            break;
        }
    }

    if( ( header->FileSize - header->BitmapDataOffset ) == ( header->width * header->height * 4 ) )
        header->NewFileLayout = 1;
    else header->NewFileLayout = 0;

    return 0;
}

int write_header(FILE *outfile, struct HeaderItem *header,int adjust)
{
    fwrite(header->identifier,sizeof(char),2,outfile);
    if( adjust == 1 )
        header->FileSize = header->width * header->height * 4 + header->BitmapHeaderSize;
    fwrite(&header->FileSize,sizeof(int),1,outfile);
    fwrite(&header->reserved,sizeof(int),1,outfile);
    fwrite(&header->BitmapDataOffset,sizeof(int),1,outfile);
    fwrite(&header->BitmapHeaderSize,sizeof(int),1,outfile);
    fwrite(&header->width,sizeof(int),1,outfile);
    fwrite(&header->height,sizeof(int),1,outfile);
    fwrite(&header->planes,sizeof(short),1,outfile);
    if( adjust == 1 )
        header->BitsPerPixel = 32;
    fwrite(&header->BitsPerPixel,sizeof(short),1,outfile);
    fwrite(&header->compression,sizeof(int),1,outfile);
    if( adjust == 1 )
        header->BitmapDataSize = header->FileSize - header->BitmapDataOffset;
    fwrite(&header->BitmapDataSize,sizeof(int),1,outfile);
    fwrite(&header->HResolution,sizeof(int),1,outfile);
    fwrite(&header->VResolution,sizeof(int),1,outfile);
    fwrite(&header->colors,sizeof(int),1,outfile);
    fwrite(&header->ImportantColors,sizeof(int),1,outfile);
}

int convert_body(FILE *infile, FILE *outfile, struct HeaderItem *header)
{
    struct _bmpixel
    {
        char blue;
        char green;
        char red;
    } bmpixel;
    char transparency = 255;
    int i;

    write_header(outfile,header,1);

    if( header->NewFileLayout == 1 )
        return -1;

    while( !feof(infile) )
    {
        fread(&bmpixel,sizeof(bmpixel),1,infile);
        fwrite(&bmpixel,sizeof(bmpixel),1,outfile);
        fwrite(&transparency,sizeof(char),1,outfile);
    }
}

int transparent_body(FILE *infile, FILE *outfile, struct HeaderItem *header, int blue, int green, int red, int transparent)
{
    struct _bmpixel
    {
        unsigned char blue;
        unsigned char green;
        unsigned char red;
        unsigned char transparency;
    } bmpixel;
    int i;

    write_header(outfile,header,0);

    for( i = 0; i < (header->width * header->height); i++ )
    {
        fread(&bmpixel,sizeof(bmpixel),1,infile);
        if( bmpixel.blue == blue && bmpixel.green == green && bmpixel.red == red)
        {
            bmpixel.transparency = transparent;
            //printf("%d,%d\n",transparent,bmpixel.transparency);
        }
        fwrite(&bmpixel,sizeof(bmpixel),1,outfile);
    }
}

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • cobratbq
  • Registratie: Maart 2001
  • Laatst online: 17-12-2015
Ik weet niet of jullie blij zijn met de code, maar je hebt iig wat info voor degene die er ook mee aan het tobben is. Dan hoef je niet heel de HEX-code door te lopen zoals ik :D

One ring to rule them all, one ring to find them, one ring to bring them all, and in darkness bind them...


  • Hangloozz
  • Registratie: Juli 1999
  • Laatst online: 13-07 17:24

Hangloozz

{ @$%&# }

sow dan... en waar gebruik je het nu uiteindelijk voor? om de XP-start-button te skinnen? :/

www.jurgroessen.nl


Verwijderd

de transparantiekleur is bij mij een paarse kleur die laat ie auto weg ofzo
Pagina: 1