Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как быстро записывать побайтно в файл?


Страницы:   1 2

Вася ©   (2013-11-19 14:24:00) 

Вот кусок процедуры:
assignfile(flb,currpath+f_GrayTMP);
 reset(flb);
 Seek(flb, 1078);

 count:=image1.Picture.Bitmap.Width*image1.Picture.Bitmap.Height;
 pix_p:=image1.Picture.Bitmap.RawImage.data;
 if image1.Picture.Bitmap.pixelformat=pf32bit then
 begin
   pix4out:=pix_p;
   inc(pix4out, count);
   repeat
     write(flb, pix4out^.rgbRed);
     dec(pix4out);
     dec(count);
   until count<=0;
 end;      


очень медленно пишет в файл (файл 800 кб секунды 3-4).
как ускорить?

использую   FPC 2.6, но думаю проблема не в компиляторе, а в подходе


Вася   (2013-11-19 15:59:00) [21]


> count после цикла чему равен?

точно, спасибо :)


MBo   (2013-11-19 15:56:00) [22]

count после цикла чему равен?

А вообще здесь цикл for лучше подойдёт


Palladin   (2013-11-19 15:47:00) [23]

reset(flb);
у reset есть второй параметр


Вася   (2013-11-19 15:46:00) [24]

переделал на массив,   BlockWrite(flb, pix_map[0], sizeof(pix_map[0])*count);ничего в файл не записывает :(
 assignfile(flb,currpath+f_GrayTMP);
 reset(flb);
 Seek(flb, 1078);
 count:=image1.Picture.Bitmap.Width*image1.Picture.Bitmap.Height;
 setlength(pix_map,count);
 i:=0;
 pix_p:=image1.Picture.Bitmap.RawImage.data;
 if image1.Picture.Bitmap.pixelformat=pf32bit then
 begin
   pix4out:=pix_p;
   inc(pix4out, count);
   repeat
    pix_map[i]:=pix4out^.rgbRed;
    dec(pix4out);
    dec(count);
    inc(i);
   until count<=0;
 end;              

BlockWrite(flb, pix_map[0], sizeof(pix_map[0])*count);
closefile(flb);


DevilDevil   (2013-11-19 14:45:00) [25]

ну или да
сначала создай кусок памяти 800кб, потом заполни его, потом запиши в файл


DevilDevil   (2013-11-19 14:32:00) [26]

http://sourceforge.net/projects/cachedbuffers/


MBo   (2013-11-19 14:29:00) [27]

Похоже, что код записывает в файл перевернутый кусок памяти. Для скорости лучше перевернуть его в массиве, потом массив целиком записать в файл - большие куски пишутся быстрее.


Вася   (2013-11-19 14:29:00) [28]

Массивом?


Медвешоног Порожок   (2013-11-19 14:28:00) [29]

побайтно не быстро.
быстро не побайтно


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо