Oczyt pliku formatu WMF

0

Witam serdecznie!

Potrzebuje wydobyć z pliku formatu Windows Metafile (WMF) informacje dotyczące zawartego w nim rysunku wektorowego. Informacje, których potrzebuje zawarte są w strukturze: tagMETAHEADER opisanej w:

http://www.whisqu.se/per/docs/wmf.htm#MICMETA-DMYID.3

Czy możliwe jest, przy wykorzystaniu „czystego” C, odczytanie pliku tego formatu tak, żeby odczytać wartości pól tej struktury? Oczywiscie nie jest to format tekstowy, zatem nie można (nie potrafię) tego zrobić przy wykorzystaniu standardowych funkcji...
Bardzo proszę o radę jak to ugryźć.

0

#include <stdio.h>
FILE* f=fopen(...);
fseek(...)
fread(...)
fclose(...)

albo

#include <io.h>
int handle=open()
seek()
read()
close()

// a w ogole to obejrzyj sobie stdio.h i io.h i f1

// dopisane, do postu ponizej: Pod winzgrozą też może sobie darować to b w fopen. ;]

0

maly przyklad ktory cie naprowadzi
[code]
struct asdf {
int a, b;
float c, d, e;
char f[ 12 ];
};

FILE *f;
struct asdf st;

f = fopen( "costam", "rb" ); /* pod linuxem to b mozesz darowac sobie*/
fread( &st, 1, sizeof( struct asdf ), f );
[/code]

i po tym masz wrzucone pierwsze hmm.. 32 bajty z pliku do struktury ;>
ofc to jest czysty zrzut do pamieci bez zadnej obrobki czy konwersji...

fread ma skladnie nastepujaca: fread( void* tutaj_umiesc_dane, unsigned int wielkosc_pola, unsigned int ilosc_pool, FILE *plik);....
w sumie ilosc bajtow do odczytu to jest wielkosc_pola * ilosc_pool
czyli np wartosci kolejno 3, 4, dadza 3 * 4 = 12 bajtow do odczytu
tyle samo bajtow odczyta zapis 1, 12...
odczyt sie praktycznie nieczym nie rozni...

gritz

0

Mozesz uzywasz fszystkich funkcji plikowych ale musisz otworzyc plik jako binarke tak wiec:
rb, ab, wb.

0

Dzięki serdeczne za pomoc, sposób jest rzeczywiście tym, czego mi potrzeba jednak popełniam prawdopodobnie jakiś kardynalny błąd:
Chcąc sczytać 3 pierwsze słowa pliku binarnego używam takiego programiku:

char buf[10], i;
fp1 = fopen(plik1, "rb");
fread(buf, 2, 3, fp1);
for (i=0; i<6; i++)
printf("%d\n", buf[i]);
fclose(fp1);

Tyle że printf wyrzuca mi jakieś koszmarki:
-41
-51
-58
-102
0
0
Gdzie leży błąd?
Pozdrawiam.

0

Wszystko jest w porządku... Masz ustawione domyslnie signed dla char (w opcjach kompilatora). Wpisz po prostu przy deklaracji tablicy słowo unsigned i będzie w działało...

unsigned char buf[10];

1 użytkowników online, w tym zalogowanych: 0, gości: 1