Герасим писал(а):Вот это меня и озадачивает. У школоты в школе PutImage работает, но дома нет.
Там картинка специальная заранее подготовленная. Формат другой, а расширения совпадают.
Модератор: Модераторы
Герасим писал(а):Вот это меня и озадачивает. У школоты в школе PutImage работает, но дома нет.


Игры последние -надцать лет используют по никсами opengl, а под виндой - ее же или directx.Лекс Айрин писал(а):Да и, допустим, игры часто требуют полного экрана.
Безусловно - это ясно из документации по PutImage, что там не стандартный bmp формат.Pavia писал(а):Там картинка специальная заранее подготовленная. Формат другой, а расширения совпадают.

{$MODE DELPHI}
{$APPTYPE CONSOLE}
program testwingraph;
uses WinGraph, WinCrt;
function GetBitmap(const AFilename: string):pointer;
var F: file;
    size: Integer;
begin
 Result:=nil;
 AssignFile(F, AFilename);
 Reset(F, 1);
 size:=Filesize(F);
 GetMem(Result, size);
 BlockRead(F, Result^, size);
 CloseFile(F);
end;
const cFilename = 'test.bmp';
var gd, gm: smallint;
    p:pointer = nil;
    bExit: Boolean = False;
    ch:char = #0;
begin
 gd:=Detect;
 gm:=0;
 InitGraph(gd, gm, 'Put Image demo');
 if GraphResult <> grOk then begin
  writeln(errOUtput, 'Initgraph error');
  Halt(1);
 end;
 p:=GetBitmap(cFilename);
 PutImage(0, 0, p^, normalput);
 FreeMem(p);
 repeat
  bExit:=CloseGraphRequest;
  if KeyPressed then begin
   ch:=Readkey;
   bExit:= bExit or (ch = #27);
  end;
 until bExit;
 CloseGraph;
end.
PutImage(0, 0, p^, normalput);
Mavlyudov писал(а):Падает на FreeMem(p);
На форме риcуется же просто через Canvax.Pixels[x,y]:=clColor;
А тут нет. Может что с указателем?
Может надо указатель делать так var p:^TBitmap ?
procedure TForm1.FormPaint(Sender: TObject);
Const
B:TBitmap=nil;
begin
If B = nil then begin 
  B:=TBitmap.Create ;
  B.LoadFromFile('Pic.bmp');
 end;
 Form1.Canvas.Draw(100,100,b);
//(освобождение памяти по   B.free; но в этом коде это делать не нужно )
end;
Alex2013 писал(а):На форме рисуется же просто через Canvax.Pixels
Mavlyudov писал(а):Тут вся соль в том, чтобы файл прочитать не средствами TBitmap, а как файл, через BlockRead(F, Result^, size);
procedure Load_Bitmap_From_DUMP (Var B: TBitmap);
Var
 F:File;
 P:Pointer;
begin
Assign(F,'Pic.IMG');
Reset (F,1);
   B.BeginUpdate(False);
   P:= B.RawImage.Data;  
    BlockRead(F, P^, B.RawImage.DataSize);
   B.EndUpdate(False);
close(f);
end;
Bmp: = TBitmap.Create ;  
Bmp.PixelFormat:=pf24bit;// или  pf32bit и т.п. 
Bmp.SetSize(w,h);
 . Поправьте пожалуйста
 . Поправьте пожалуйстаvar
Buf: array[0..32767] of Byte;
w,h,i:integer;
function TakeBitmap:pointer;
var F: file;
    size: Integer;
//    P1:Pointer;
    AFilename: string;
begin
AFilename := 'i:\image.bmp';
AssignFile(F, AFilename);
Reset(F, 1);
//Пропускаем 14 байт заголовка BitMapFileHeader
//и 40 байт BitMapInfoHeader
Seek(F, 55);
BlockRead(F, buf, size);
CloseFile(F);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
w:=260;
h:=260;
Bmp:=TBitmap.Create ;
Bmp.PixelFormat:=pf8bit;
Bmp.Width:=w;
bmp.Height:=h;
p:=TakeBitmap;
Move(p, Bmp, w*h);
Form1.Canvas.Draw(100,100,Bmp);
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
F:File;
PDUMP:Pointer;
Size:Integer;
bi:BitmapInfo;
begin
w:=260;
h:=260;
 with bi.bmiHeader do begin
    biSize:= SizeOf(TBitmapInfoHeader);
    biWidth:= w;
    biHeight:= h;
    biPlanes:= 1;
    biBitCount:= 4;
    biCompression:= BI_RGB;
    biSizeImage:= 0;
    biXPelsPerMeter:= 0;
    biYPelsPerMeter:= 0;
    biClrUsed:= 0;
    biClrImportant:= 0;
  end;
AssignFile(F,'i:\image.bmp');
Reset (F,1);
Size:=FileSize(F);
GetMem(PDUMP,Size);
BlockRead(F, PDUMP^,Size);
CloseFile(F);
StretchDIBits(Form1.Canvas.Handle,
0,0, Form1.Width, Form1.Height,
0, 0, w, h,
PDUMP,
bi,
0, SRCCOPY);
end;Move(PDUMP, Bmp, w*h*size);
Form1.Canvas.Draw(100,100,Bmp);Move(PDUMP, Bmp.scanline[0]^, w*h*bpp);
Form1.Canvas.Draw(100,100,Bmp);
   B.BeginUpdate(False);
      Move(PDUMP, Bmp.scanline[0]^, w*h*bpp);
   B.EndUpdate(False);
Form1.Canvas.Draw(100,100,Bmp);
Form1.PaintBox1.Canvas.Draw(100,100,Bmp);
Form1.PaintBox1.Refresh; 
Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1