bitmapy i stream read error

Odpowiedz Nowy wątek
2006-07-24 13:23
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

2006-07-24 14:19
Ad
0

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


Pozostało 580 znaków

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
0

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


Pozostało 580 znaków

2006-07-25 22:38
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
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
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
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
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
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
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
Liczba odpowiedzi na stronę

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