eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingOperacje na plikach (odczyt i zapis fread i fwrite)Re: Operacje na plikach (odczyt i zapis fread i fwrite)
  • Data: 2010-04-13 16:06:45
    Temat: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Od: "Marcin M." <m...@g...com> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]

    Dzięki, teraz działa. Niestety kłóci się z resztą programu. (Po
    uruchomieniu dostaję komunikat "Przepraszamy, wystąpił problem z
    aplikacją Bitmapy.exe i zostanie ona zamknięta..." - dlaczego?).
    Wywołując TYLKO funkcje LoadData i LoadImage wszystko chodzi pięknie.
    Co do błędu ortograficznego - zauważyłem go po wrzuceniu posta a nie
    znalazłem opcji edytuj - przepraszam za urażenie Waszych zmysłów
    estetycznych : )
    Wczytuję cały plik bo są to niewielkie pliki (8x8), poza tym staram
    się tylko przetestować operacje na plikach i zrozumieć dobrze jak
    poprawnie używać fread i fwrite.
    Oto reszta:
    #include<iostream>
    #include<fstream>
    #include <Windows.h>

    using namespace std;


    class BMP

    {
    public:
    typedef struct
    {
    WORD bfType;
    DWORD bfSize;
    DWORD bfReserved1;
    DWORD bfReserved2;
    DWORD bfOffBits;
    } bmpFH;

    typedef struct
    {
    DWORD biSize;
    LONG biWidth;
    LONG biHeight;
    WORD biPlanes;
    WORD biBitCount;
    DWORD biCompression;
    DWORD biSizeImage;
    LONG biXPelsPerMeter;
    LONG biYPelsPerMeter;
    DWORD biClrUsed;
    DWORD biClrImportant;
    } bmpIH;

    typedef struct
    {
    int R;
    int G;
    int B;
    int empty;
    } colors;

    bmpFH FileHeader;
    bmpIH InfoHeader;
    colors IMGData;
    unsigned char *Data;

    };



    int x,y;

    char *buff;
    long DSize;
    int *binary;
    FILE* plik;
    FILE* data;



    int LoadImage(char *sciezka)
    {
    BMP BM;
    plik = fopen(sciezka, "rb");
    fread(&BM.FileHeader, sizeof(BMP::bmpFH), 1, plik);
    fread(&BM.InfoHeader, sizeof(BMP::bmpIH), 1, plik);
    if (BM.FileHeader.bfType != 0x4D42)
    {
    printf("UWAGA: To nie jest bitmapa\n");
    fclose(plik);
    return 1;
    }

    fseek(plik, 18, SEEK_SET);
    fread(&x, sizeof(LONG), 1, plik);
    fread(&y, sizeof(LONG), 1, plik);
    cout<<"Rozmiar obrazu (XxY) to: "<<x<<"x"<<y<<endl;
    cout<<"Maksymalny rozmiar przechowywanych informacji: "<<((x-(x
    %4))*y*3)<<" bitow"<<endl;
    }


    int LoadData(char *sciezka)
    {

    data = fopen(sciezka, "rb");
    fseek(data,0,SEEK_END);
    DSize= ftell(data)*8;
    if (DSize>((x-(x%4))*y*3))
    {
    printf("UWAGA: Rozmiar pliku zbyt duzy\n");
    fclose(data);
    return 1;
    }
    cout<<"Aktualny rozmiar pliku z danymi: "<<DSize<<endl;
    fseek(data,0,SEEK_SET);

    char*buff;
    buff=(char*)malloc(sizeof(char)*(DSize/8));
    fread(buff,1,(DSize/8),data);

    binary = new int[DSize];
    int i,j;
    i=0;
    j=0;
    for (i=0; i<=DSize; i=i+8)
    {
    j=0;
    for(unsigned m = 128; m > 0; m >>= 1)
    {
    if(buff[i/8] & m)
    {binary[i+j]=1; }
    else
    {binary[i+j]=0; }
    j++;
    }
    } fclose(data);
    free(buff);
    }


    int przepisz (char *path1, char *path2)
    {
    FILE* zrodlo;
    FILE* target;

    zrodlo = fopen(path1,"rb");
    target = fopen(path2,"wb");
    rewind(zrodlo);
    fseek(zrodlo,0,SEEK_END);
    size_t p1size=ftell(zrodlo);

    rewind(target);
    rewind(zrodlo);
    void*bufer;
    bufer=malloc(p1size);
    fread(bufer,p1size,1,zrodlo);
    fwrite(bufer,p1size,1,target);
    fclose(zrodlo);
    fclose(target);
    free(bufer);
    return 0;

    }

    void main(void)
    {
    LoadImage("obraz3.bmp");
    LoadData("dane.dnn");
    //przepisz("obraz3.bmp","przepisany.bmp");


    }

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: