Помощь - Поиск - Пользователи - Календарь
Полная версия: Печать изображения из паскаля
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Ronin
Доброго всем времени суток...

Несильно знаком с паскалем, поэтому появился такой вопрос. Я написал программу, результатом которой является вывод на экран некоторого графического изображения. Мне необходимо это изображение распечатать на принтере, либо просто сохранить в файл любого стандартного виндосовского формата. Подскажите пожалуйста, как я могу это сделать? Кнопкой PrintScreen пользоваться из Паскаля не получается.

Буду благодарен...
volvo
Читай здесь: Скриншоты
Ronin
Спасибо...

Но теперь появился другой вопрос. При компиляции основной программы появляется ошибка 15: File not found (BMP_PLUS.TPU) Как теперь следует поступить?
volvo
Компилировать не через Alt+F9, а через F9 (то есть, не Compile, а Make из меню), тогда сначала откомпилируются все модули, и только потом - сама программа...
Ronin
Хм... В этом случае открывается код модуля, курсор на точке после последнего end, и ошибка 14: Invalid filename (d:\prog\tp7\tpu\BMP_PLUS.TPU).
volvo
Значит, что-то не так прописано в Options -> Directories, проверяй, все ли пути, присутствующие там, существуют на самом деле...
Ronin
Да, да..... С этой ошибкой разобрался... Теперь работает, только сохраняет в файл черный экран. Приведу код, правильно ли я вызов save_bmp поставил?

Код
program lab;
  uses crt,graph,BMP_PLUS;
  var a:array[1..10] of real; b:array[1..10] of real;
      t1,t2,t3,t4,a0,a1,e,dn:real;
      i,gd,gm,dp:integer;
begin clrscr;
  initgraph(gd,gm,'');
  line(50,30,50,400);
  line(50,400,600,400);
  for i:=1 to 11 do line(48,(400-30*i),52,(400-30*i));
  for i:=1 to 17 do line((50+30*i),398,(50+30*i),402);
  for i:=0 to 15 do begin
            dp:=20*i;
            dn:=0.384*0.01*dp;
            circle((50+round(dp*1.5)),(400-round(dn*300)),1);
            end;
  t1:=0; t2:=0; t3:=0; t4:=0; a0:=0; a1:=0; e:=1;
  a[1]:=330; b[1]:=1.110*0.0001;
  a[2]:=285; b[2]:=0.999*0.0001;
  a[3]:=255; b[3]:=0.888*0.0001;
  a[4]:=225; b[4]:=0.777*0.0001;
  a[5]:=195; b[5]:=0.666*0.0001;
  a[6]:=165; b[6]:=0.555*0.0001;
  a[7]:=135; b[7]:=0.444*0.0001;
  a[8]:=105; b[8]:=0.333*0.0001;
  a[9]:=75; b[9]:=0.278*0.0001;
  a[10]:=45; b[10]:=0.167*0.0001;
  for i:=1 to 10 do begin
            t1:=t1+a[i];
            t2:=t2+a[i]*a[i];
            t3:=t3+b[i];
            t4:=t4+a[i]*b[i];
            end;
  {writeln(t1:12:8);
  writeln(t2:12:8);
  writeln(t3:12:8);
  writeln(t4:12:8);} i:=0;
  while e>0.0000001 do begin
            i:=i+1;
            a0:=(t3-t1*a1)/10;
            e:=abs(t1*a0+t2*a1-t4);
            a1:=a1+0.000000000001;
            end;
  for i:=0 to 16 do begin
            dp:=20*i;
            dn:=10000*(a0+a1*dp);
            circle((50+round(dp*1.5)),(400-round(dn*300)),1);
            end;
  setcolor(red);
  for i:=1 to 10 do circle((50+round(a[i]*1.5)),(400-round(b[i]*300*10000)),1);
  save_bmp(0,0,getmaxx,getmaxy,'screen_l.bmp',0);
  readln;
end.
volvo
Я ж вроде говорил, что для 16-ти цветного режима надо передавать в Save_Bmp единицу шестым параметром, почему ты передаешь 0?
Ronin
Невнимательность - большой враг наш...

Теперь все в порядке. Спасибо огромное за помощь и за доступные разъяснения... smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.