jak wyświetlić obrazek w formacie .dib

0

Witam
mam taki problem ze nie umiem wyświetlić obrazka który jest zapisany w formacie DIB próbowałem zrobić to jak ze zwykłym bmp ale niestety pokazywały się tylko jakieś śmiecie ;-( czy ktoś wie jak można to zrobić jakich funkcji użyć ?? 8-O

0

Lichoo... ja do tej pory mało pracowałem z bitmapkami własnoręcznie, ale zawsze myślałem, że bmp i dib pod Windowsem to jeden pies. btw: w czym to zrobić? Własnoręcznie przetwarzać plik, czy może w GDI Windowsa, a może w czymś jeszcze innym. Na tę chwilę potrafię tylko tyle:

http://en.wikipedia.org/wiki/Device-independent_bitmap#Typical_file_format

0

Te diby i bmp to chyba jeden pies, na wiki i na msdnie są to nazwy używane zamiennie, problem w tym, że te bitmapy mają kilka różnych standardów ;)

próbowałem zrobić to jak ze zwykłym bmp

Czyli...? Są różne sposoby na zrobienie tego (od skorzystania z jakichś gotowych funkcji do własnoręcznego napisania wszystkich potrzebnych struktur, z kilkoma sposobami pomiędzy ;)) więc napisz, jaki sposób ci nie działa ;)

Z tym co podałeś to przychodzi mi do głowy tylko że (zakładam, że korzystasz ze struktur z windows.h):

  • zastosowałeś zły drugi header (np. nie BITMAPINFOHEADER tylko BITMAPCOREHEADER), skoro plik ma rozszerzenie dib to pewno jakiś starszy (teraz się chyba już tego nie używa)
  • plik ma indeksowane kolory a ty odczytujeszgo tak, jak zwykły
  • odwrotnie ;)

Warto też zerknąć tu: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_7ltf.asp

0

dziekuje za zainteresowanie i pomocą :) a kod do wyrysowania bitmapki wygląda tak:

BITMAPFILEHEADER head;
BITMAPINFOHEADER head_img;
RGBTRIPLE pixel;
FILE *f;
BYTE bajt;
if((f = fopen("klatka.bmp", "rb")) == NULL)
    MessageBox("Nie można otworzy pliku!", "Błąd", MB_OK|MB_ICONERROR);
else{
    fread(&head, sizeof(head), 1, f); //wczytujemy nagłówek pliku
    fread(&head_img, sizeof(head_img), 1, f); //wczytujemy nagłówek rysunku
    //
    int nKorekta = head_img.biWidth % 4; 

    //odczytujemy piksele i rysujemy w dialogu:
    for(int i=0; i < head_img.biHeight; i++){
        for(int j=0; j < head_img.biWidth; j++){
            fread(&pixel, sizeof(pixel), 1, f); 
            dc.SetPixel(j, head_img.biHeight - i, RGB(pixel.rgbtRed, pixel.rgbtGreen, pixel.rgbtBlue));
        }
        for(int x=0; x < nKorekta; x++)
            fread(&bajt, sizeof(BYTE), 1, f);

taki mam kod w funkcji OnPaint() i jeżeli chodzi o rysowanie .bmp to wszystko świetnie działa a jak mam ten drugi format .dib który jak (chyba) dobrze rozumiałem jest również bitmapą wywala mi jakieś śmiecie mimo że na podglądzie w przeglądarce do zdjęć jest ładny obrazek :/
chodzi mi o ten format dib bo w takim formacie zapisywane są klatki z kamerki a chciałbym je móc otworzyć do edycji żeby można było coś z nimi pokombinować :)

0

Czyli pewnie coś z tych rzeczy o których napisałem w poprzednim poście (jest jeszcze jedna możliwość: plik jest kompresowany za pomocą algorytmu Run-Length Encoding (RLE), wtedy długie ciągi takich samych wartości są zamieniane coś w stylu 'liczba|wartość', np. 'wwww' byłoby zamienione na '4w', chociaż nie jestem do końca pewny jak to wygląda to w bitmapach. W każdym razie możesz podejrzeć biCompression by się upewnić). Pobaw się hexedytorem i spróbuj sprawdzić, do jakich struktur ze strony, którą podałem pasuje ten plik, albo podeślij mi na maila pare takich plików, mogę spróbować sam to zrobić ;)

0

ok dzięki za podpowiedź
postaram się przez weekend zrobić to co napisałeś i mam nadzieję że się uda to załatwić :)
a gdybym sobie nie poradził to będę Cię jeszcze nękał :-) ;-)

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