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)
  • Path: news-archive.icm.edu.pl!news.rmf.pl!news.icm.edu.pl!uw.edu.pl!newsgate.cistron.
    nl!newsgate.news.xs4all.nl!194.109.133.84.MISMATCH!newsfeed.xs4all.nl!newsfeed5
    .news.xs4all.nl!xs4all!feeder.news-service.com!postnews.google.com!q15g2000yqj.
    googlegroups.com!not-for-mail
    From: "Marcin M." <m...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: Operacje na plikach (odczyt i zapis fread i fwrite)
    Date: Tue, 13 Apr 2010 09:06:58 -0700 (PDT)
    Organization: http://groups.google.com
    Lines: 167
    Message-ID: <f...@q...googlegroups.com>
    References: <b...@r...googlegroups.com>
    <s...@e...rdc.pl>
    NNTP-Posting-Host: 94.101.17.49
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: quoted-printable
    X-Trace: posting.google.com 1271174818 18793 127.0.0.1 (13 Apr 2010 16:06:58 GMT)
    X-Complaints-To: g...@g...com
    NNTP-Posting-Date: Tue, 13 Apr 2010 16:06:58 +0000 (UTC)
    Complaints-To: g...@g...com
    Injection-Info: q15g2000yqj.googlegroups.com; posting-host=94.101.17.49;
    posting-account=AgGXswoAAAC4QxSGXxVVs7B6wIHIN6wC
    User-Agent: G2/1.0
    X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3)
    Gecko/20100401 Firefox/3.6.3 GTB6,gzip(gfe)
    Xref: news-archive.icm.edu.pl pl.comp.programming:185445
    [ ukryj 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: