bitmapy i stream read error

Odpowiedz Nowy wątek
2006-07-24 13:23

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

Witam

Robie sobie takie male przetwarzanie wsadowe ale mam pewien problem

petla wczytujaca i obrabiajaca kolejne bitmapy wykonuje sie dokladnie i za kazdym razem tylko 49 razy po czym komunikat grzmi: Stream read error

tak samo jest na tbitmap jak i timage czy timage32 z gr32

czy cos trzeba dopisac przy wielokrotnym wczytywaniu obrazkow?

oto kod petli:

bm:tbitmap;

for i:=0 to checklistbox1.items.Count-1 do
        begin
        if checklistbox1.Checked[i] then
                begin
                try
                bm:=tbitmap.Create;
                bm.LoadFromFile(checklistbox1.Items[i]);

                ramka(ggrubosc.Position,gkrycie.Position,'');

                form1.Canvas.Draw(0,0,bm);

                plik:='n'+extractfilename(checklistbox1.Items[i]);
                plik:=ChangeFileExt(plik, '.bmp');
                plik:=extractfiledir(checklistbox1.Items[i])+'\'+plik;

                bm.SaveToFile(plik);
                finally
                bm.free;
                end;

                application.ProcessMessages;
                end;
        end;

Pozostało 580 znaków

Ad
2006-07-24 14:19
Ad

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

0

application.ProcessMessages; - co to i po co to?


Pozostało 580 znaków

sv36.
2006-07-25 21:50
sv36.
0

To jest po to, że gdy sie nacisnie to, to sie zatrzyma to
bo inaczej to wykonywaloby sie dluzej niz tamto

ale poważnie

czyżby nikt na tak zacnym forum nie potrafil mi cos poradzic w tej dramatycznej sytuacji [!!!]
mam nadzieje ze to przejsciowe zdarzenie spowodowane upalami

ps. pozdrowienia dla Kolegi Pana Gienka [browar]

Pozostało 580 znaków

2006-07-25 22:29

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

Może problem nie tkwi w kodzie a w bitmapie? [???]


Pozostało 580 znaków

2006-07-25 22:38

Rejestracja: 15 lat temu

Ostatnio: 9 lat temu

0

W której linijce pojawia się ów błąd?


Nowe pomysły są inną kombinacją starych elementów. Nie ma nowych elementów. Są tylko nowe kombinacje.

Pozostało 580 znaków

2006-07-25 22:45

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

bitmapy sa dobre - typowe 24 bitowe zapisywane w paint'cie czy irfanview

jesli chodzi o linijke to w tym miejscu: bm.loadfromfile

dzieki

Pozostało 580 znaków

2006-07-25 22:48

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

aha
jeszcze jedno

gdy uruchomilem program gdzies z 4 razy
(za kazdym razem dochodzil do 49 obrazka)
to za 5 razem w ogole nic juz nie moglem wczytac

Pozostało 580 znaków

2006-07-25 23:56

Rejestracja: 16 lat temu

Ostatnio: 8 lat temu

0

a po co niszczysz bm skoro dalej z niej korzystasz?? Stwórz ją raz na początku, potem w pętli ładuj, wyświetlaj i zapisuj bmp a na końcu jak już wszystkie bmp przelecisz to niszcz bm.
Ew. zamiast TBitmap użyj TBitmap32 z gr32.

PS. jak duże są te bitmapy?


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-07-26 11:56

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

jesli chodzi o niszczenie bm
na poczatku bylo tak jak napisales ale zmienilem bo myslalem ze to powoduje ten blad
jednak to nie ma na niego wplywu

kod byl taki

try
bm:=tbitmap.Create;
for i:=0 to checklistbox1.items.Count-1 do
        begin
        if checklistbox1.Checked[i] then
                begin
                bm.LoadFromFile(checklistbox1.Items[i]);

                ramka(ggrubosc.Position,gkrycie.Position,'');

                form1.Canvas.Draw(0,0,bm);
                plik:='n'+extractfilename(checklistbox1.Items[i]);
                plik:=ChangeFileExt(plik, '.bmp');
                plik:=extractfiledir(checklistbox1.Items[i])+'\'+plik;

                bm.SaveToFile(plik);

                application.ProcessMessages;
                end;
        end;
finally
bm.free;
end;

jest jeszcze cos takiego jak bm.freeimage i releaseHandle
tutaj cos pisza na ten temat
ale tez nie umiem sobie z tym poradzic

tak w ogole to na poczatku robilem na tbitmap32 potem na timage az w koncu na tbitmap
we wszystkich przypadkach to samo 49 zdjec i koniec
wspomne nawet ze na poczatku byly to jpg

najwieksze bitmapy jakie byly wczytywane to 922x691 czyli ok. 1,8 mega

jeszcze jedno
w procedurze ramka nastepuje odczyt i zapis do aktualnej bitmapy typu
k:=bm.Canvas.Pixels[x,y];//odczyt do tcolor
i
bm.Canvas.Pixels[x,y]:=rgb(r,g,b);//zapis

moze system nie nadąża odczytywac i zapisywac tych bitmap i trzeba cos dopisac
(stosowalem bez skutku sleep)

a oto ciekawy wynik dzialania programu

user image

Pozostało 580 znaków

2006-07-26 12:51

Rejestracja: 16 lat temu

Ostatnio: 8 lat temu

0

to ja jestem za tym, że problem leży albo w nazwie bmp albo ta 49 jest uszkodzona.

spróbuj jeszcze zrobić tylko tak

bm:=tbitmap.Create;
try
  for i:=0 to checklistbox1.items.Count-1 do
  begin
    if checklistbox1.Checked[i] then
    begin
      if FileExist(checklistbox1.Items[i]) then
      begin
        bm.LoadFromFile(checklistbox1.Items[i]);
        form1.Canvas.Draw(0,0,bm);
        plik := 'c:\bmp\' + IntToStr(i) + '.bmp';
        bm.SaveToFile(plik);
      end;
    end;
  end;
finally
bm.free;
end;

bez operowania na bmp i ze sprawdzaniem, czy na 100% bitmapa istnieje


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2006-07-26 21:27

Rejestracja: 14 lat temu

Ostatnio: 12 lat temu

0

dzieki bardzo

rzeczywiscie 50-ta bitmapa byla wadliwa
co dziwne otwierala sie poprawnie we wszystkich przegladarkach a nawet Paint'cie dlatego zignorowalem wczesniej ten trop

po zapisaniu jej jeszcze raz wszystko jest ok

pozdrowienia dla Miśkad i całego forum

Pozostało 580 znaków

Odpowiedz

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