[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Wczytywanie fragmentu bitmapy, windows, c++

Krzysztof

5/7/2007 6:35:00 AM

Witam!

Mam nastepujacy problem. Tworze mape 2D, która bedzie mogla byc
przesuwana w dowolnym kierunku. Mapa ta zapisana jest w pliku o bardzo
duzej rozdzielczosci. Z tego powodu nie chcialbym wczytywac jej w
calosci do pamieci a dopiero stamtad rysowac jej fragment na ekranie.
Moje pytanie - czy jest jakis sposób na wczytanie bezposrednio z pliku
tylko fragmentu bitmapy czy musze to zrobic, ze tak powiem "recznie",
operujac na bajtach i przesuwajac sie o okreslona ich ilosc w pliku
(podejrzewam, ze bedzie to bardzo wolne)

Pozdrawiam

4 Answers

Pawel Kierski

5/8/2007 6:38:00 AM

0

Krzysztof w wiadomo?ci <1178519679.881717.240370@u30g2000hsc.googlegroups.com> pisze:
> Witam!
>
> Mam nastepuj?cy problem. Tworze mape 2D, która bedzie mog3a bya
> przesuwana w dowolnym kierunku. Mapa ta zapisana jest w pliku o bardzo
> du?ej rozdzielczo?ci. Z tego powodu nie chcia3bym wczytywaa jej w
> ca3o?ci do pamieci a dopiero stamt?d rysowaa jej fragment na ekranie.
> Moje pytanie - czy jest jaki? sposób na wczytanie bezpo?rednio z pliku
> tylko fragmentu bitmapy czy musze to zrobia, ?e tak powiem "recznie",
> operuj?c na bajtach i przesuwaj?c sie o okre?lon? ich ilo?a w pliku
> (podejrzewam, ?e bedzie to bardzo wolne)

Dwie mo?liwo?ci - je?li rozmiar mapy jest faktycznie bardzo du?y
(rzedu pamieci fizycznej i wiecej), to trzeba pobawia sie w jakie?
sprytne buforowanie lub struktury danych. Piszesz o przesuwaniu, czyli
wiadomo, ?e w danej chwili bedziesz potrzebowa3 co najwy?ej otoczenia
aktualnie wy?wietlanego obszaru - to jaki? punkt wyj?cia do algorytmu
buforowania lub struktur danych.
Je?li rozmiar nie jest bardzo wielki, to mo?esz spróbowaa mapowania
pliku do pamieci (CreateFile, CreateFileMapping, MapViewOfFile).

--
Pawe3 Kierski
news@pkierski.net
dodaj "[nomorespam]" w temacie je?li piszesz z domeny innej ni? .pl,
albo koniecznie chcesz obej?a moje filtry 8-)

Jedrzej Dudkiewicz

5/8/2007 10:51:00 AM

0

> Witam!

> Mam nastepuj?cy problem. Tworze mape 2D, która bedzie mog3a bya
> przesuwana w dowolnym kierunku. Mapa ta zapisana jest w pliku o bardzo
> du?ej rozdzielczo?ci. Z tego powodu nie chcia3bym wczytywaa jej w
> ca3o?ci do pamieci a dopiero stamt?d rysowaa jej fragment na ekranie.
> Moje pytanie - czy jest jaki? sposób na wczytanie bezpo?rednio z pliku
> tylko fragmentu bitmapy czy musze to zrobia, ?e tak powiem "recznie",
> operuj?c na bajtach i przesuwaj?c sie o okre?lon? ich ilo?a w pliku
> (podejrzewam, ?e bedzie to bardzo wolne)

Proponuje zrobia tak: podziel obraz wej?ciowy krat? N na M pól. N i M
dobierz tak, ?eby na ekran wchodzi3o np. jedno pole. Nastepnie ka?de z tych
pól zapisz jako oddzielny obraz. Potem mo?esz wszystkie te obrazy zapisaa
jako jeden plik. Dzieki temu, aby odczytaa obraz, bedziesz potrzebowa3
jednego seek() i jednego read() (w C/C++, that is). Wad? rozwi?zania jest
to, ?e taki plik, otworzony w "normalnej" przegl?darce, nie bedzie
przypomina3 samego siebie. Mo?esz te? spytaa na grupie dot. grafiki (nie
znam ?adnej), czy jest ju? format pliku realizuj?cy co? takiego dla
dowolnych N i M - wówczas sprawa praktycznie sama sie rozwi?zuje.

JD

Lopez

5/8/2007 9:35:00 PM

0

Jedrzej Dudkiewicz napisa3(a):
>> Witam!
>
>> Mam nastepuj?cy problem. Tworze mape 2D, która bedzie mog3a bya
>> przesuwana w dowolnym kierunku. Mapa ta zapisana jest w pliku o bardzo
>> du?ej rozdzielczo?ci. Z tego powodu nie chcia3bym wczytywaa jej w
>> ca3o?ci do pamieci a dopiero stamt?d rysowaa jej fragment na ekranie.
>> Moje pytanie - czy jest jaki? sposób na wczytanie bezpo?rednio z pliku
>> tylko fragmentu bitmapy czy musze to zrobia, ?e tak powiem "recznie",
>> operuj?c na bajtach i przesuwaj?c sie o okre?lon? ich ilo?a w pliku
>> (podejrzewam, ?e bedzie to bardzo wolne)
>
> Proponuje zrobia tak: podziel obraz wej?ciowy krat? N na M pól. N i M
> dobierz tak, ?eby na ekran wchodzi3o np. jedno pole. Nastepnie ka?de z tych
> pól zapisz jako oddzielny obraz. Potem mo?esz wszystkie te obrazy zapisaa
> jako jeden plik. Dzieki temu, aby odczytaa obraz, bedziesz potrzebowa3
> jednego seek() i jednego read() (w C/C++, that is). Wad? rozwi?zania jest
> to, ?e taki plik, otworzony w "normalnej" przegl?darce, nie bedzie
> przypomina3 samego siebie. Mo?esz te? spytaa na grupie dot. grafiki (nie
> znam ?adnej), czy jest ju? format pliku realizuj?cy co? takiego dla
> dowolnych N i M - wówczas sprawa praktycznie sama sie rozwi?zuje.
>

OIDP, TIFF ma takie mo?liwo?ci,
libtiff zdaje sie potrafi obslu?ya (tile-oriented).
http://www.libtiff.org/li...

--
Pozdrawiam
Lopez

Krzysztof

5/9/2007 5:58:00 AM

0

On May 8, 11:34 pm, Lopez <rtlopezREM...@gazeta.pl> wrote:
> Jedrzej Dudkiewicz napisal(a):
>
>
>
> >> Witam!
>
> >> Mam nastepujacy problem. Tworze mape 2D, która bedzie mogla byc
> >> przesuwana w dowolnym kierunku. Mapa ta zapisana jest w pliku o bardzo
> >> duzej rozdzielczosci. Z tego powodu nie chcialbym wczytywac jej w
> >> calosci do pamieci a dopiero stamtad rysowac jej fragment na ekranie.
> >> Moje pytanie - czy jest jakis sposób na wczytanie bezposrednio z pliku
> >> tylko fragmentu bitmapy czy musze to zrobic, ze tak powiem "recznie",
> >> operujac na bajtach i przesuwajac sie o okreslona ich ilosc w pliku
> >> (podejrzewam, ze bedzie to bardzo wolne)
>
> > Proponuje zrobic tak: podziel obraz wejsciowy krata N na M pól. N i M
> > dobierz tak, zeby na ekran wchodzilo np. jedno pole. Nastepnie kazde z tych
> > pól zapisz jako oddzielny obraz. Potem mozesz wszystkie te obrazy zapisac
> > jako jeden plik. Dzieki temu, aby odczytac obraz, bedziesz potrzebowal
> > jednego seek() i jednego read() (w C/C++, that is). Wada rozwiazania jest
> > to, ze taki plik, otworzony w "normalnej" przegladarce, nie bedzie
> > przypominal samego siebie. Mozesz tez spytac na grupie dot. grafiki (nie
> > znam zadnej), czy jest juz format pliku realizujacy cos takiego dla
> > dowolnych N i M - wówczas sprawa praktycznie sama sie rozwiazuje.
>
> OIDP, TIFF ma takie mozliwosci,
> libtiff zdaje sie potrafi obsluzyc (tile-oriented).http://www.libtiff..org/li...
>
> --
> Pozdrawiam
> Lopez

Dzieki serdeczne,
pozdrawiam