|
| Zadanie z C++: tworzenie pliku graficznego |
|
|
Wysłano: Sobota, 12 Czerwca 2004, 20:08 |
|
|
|
Witam serdecznie.
Mam wielką prośbę do osób, które posiadaja wiedze tajemną w tej materji, jako ze niejest to moja działka i jak narazie jestem zielony choć chce to zmienić, a kolega J@ger powiedził mi że powinny sie tu znaleźć życzliwe osoby, dlatego też ta prośba. Wracając do tematu mam taki mały projekt :
Muszę napisać zbiór funkcji który będzie umozliwiał tworzenie pliku graficznego BMP i umozliwi rysowanie w nim prostych obiektów.Plik powinien być plikiem typu BMP nieskompresowanym, o 24 bitach na piksel(RGB).Funkcje powinny umozliwiać: tworzenie nagłówków obrazka o zadanych rozmiarach, rysowanie punktów
Nieoczekuję gotowego rozwiązania, może ktos będzie w stanie powiedzieć mi jak to ugryżć, wytłumaczyć jak się do tego zabrać.
Jeszcze raz prosze o pomoc.
Narazie. |
|
Ostatnio zmieniony przez TREW dnia Niedziela, 13 Czerwca 2004, 17:51, w całości zmieniany 1 raz |
|
|
|
|
|
|
|
| Re: <TREW> Zadanie z C++: tworzenie pliku graficznego |
|
|
Wysłano: Niedziela, 13 Czerwca 2004, 10:39 |
|
|
|
no chłopy pls
pomóżta facetowi
ostatnie zaliczenie = wakacje i moze sie zając tym co umie robic najlepiej :) czyli dbaniem o przyszła zonę i zarabianiem pieniędzy
ja jestem straszny leszcz z C i nie poradze, ale wy na pewno wiecie o co chodzi |
|
|
|
|
|
|
|
|
| Re: <TREW> Zadanie z C++: tworzenie pliku graficznego |
|
|
Wysłano: Niedziela, 13 Czerwca 2004, 19:47 |
|
|
|
Tak to sięrobi w Visual C++ 6
A więc tak.
Robisz sobie strukturę
Kod: |
MyRGB
{
BYTE blue;
BYTE green;
BYTE red;
}
|
Robisz sobie tablicę o odpowiednich wymiarach
Kod: |
MyRGB *buf;
buf=new MyRGB[w*h];
gdzie w to szerokość a h to wysokość.
|
bierzesz sobie jakiśkolor dajmy na to
Kod: |
MyRGB kolor;
kolor.blue=10;
kolor.green=50;
kolor.red=100;
i piksele w obrazku zaznaczasz
buf[h*w+y]=kolor;
|
Oprócz bufora RGB trzeba zrobićdwa nagłówki. BITMAPFILEHEADER i BITMAPINFOHEADER.
Kod: |
BITMAPFILEHEADER bfTag;
BITMAPINFOHEADER biTag;
bfTag.bfType=0x4d42;//czyli dwie literki BM co oznacza, że plik jest w formacie BMP
bfTag.bfSize=54+w*h*3;//rozmiar pliku 54 to rozmiar nagłówka w*h*3 to rozmiar matrycy kolorów
bfTag.bfOffBits=54;//odległość od początku pliku do matrycy kolorów. Można dać więcej i w środku wstawić jakieśrozszeżone formaty, które będą czytały tylko wybrane aplikacje, są rożne inne, ale w przypadku najprostszego 24bitowego bmp wystarczy na stałe 54 (jak ma mniej bitów to jest jeszcze tablica LUT)
biTag.biSize=40;//rozmiar nagłówka, sąwersje rozszeżone dal bardziej skomplikowanych formatów, tu używam najprostszego
biTag.biHeight=h;//wysokość, można daćujemną co będzie oznaczać, że bitmapa jest dogóry nogami, nieraz sięto przydaje
biTag.biWidth=w;//szerokość
biTag.biPlanes=1;//inne niż 1 w bardziej urozmaiconych formatach
biTag.biBitCount=24;//ilość bitów na pixel
biTag.biCompression=0;//0 - brak kompresji
biTag.biSizeImage=w*h*3;//rozmiar obrazka w bajtach
biTag.biXPelsPerMeter=300;//dpi w poziomie może byćdowolne, niektóre obrazki na podstawie tego skalują obrazek przy wydruku itp
biTag.biYPelsPerMeter=300;//dpi w pionie
biTag.biClrUsed=0;//przy 24bitach niepotrzebne
biTag.biClrImportant=0;//jak wyżej
|
Otwiersz plik do zapisu, zapisujesz BITMAPFILEHEADER, później BITMAPINFOHEADER, a na końcu kolejne komórki tablicy.
Jeśli to ma być w czymś innym niż Visual to strukturki deklarowane są
Kod: |
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
|
WORD to 16bitowy unsignedint
DWORD to 32bitowy unsignedint
LONG to 32bitowy int
BYTE to unsigned char |
|
|
|
|
|
|
|
|
| Re: Zadanie z C++: tworzenie pliku graficznego |
|
|
Wysłano: Poniedziałek, 14 Czerwca 2004, 19:30 |
|
|
|
Bardzo Ci dziękuje, w końcu wiem mniej więcej jak się do tego zabrać ;) |
|
|
|
|
zaręczyny w wellness Ciechocinek
Kopiowanie i rozpowszechnianie materiałów w całości lub części jest niedozwolone. Wszelkie informacje zawarte w tym miejscu są chronione prawem autorskim.
|