- // Typen und Variabeln definieren
- type
- xMyCol = Record blue, green, red: Byte; end;
- xPreBuffer = Array[0..63999] of xMyCol;
- var
- calcTable: Array[0..199] of Integer;
- PreBuffer: xPreBuffer;
- BitmapInfo: pBitmapInfo;
- fTarget: tCanvas;
- // später im source
- procedure InitGraph(target: tCanvas);
- var i: Integer;
- begin
- if Init then Exit;
- fTarget:=target;
- for i:=0 to 199 do calcTable[i]:=(199-i)*320; // y ist invertiert!
- GetMem(bitmapInfo, SizeOf(TBitmapInfoHeader));
- with BitmapInfo^.bmIHeader do
- begin
- biSize := 40;
- biWidth := 320;
- biHeight := 200;
- biPlanes := 1;
- biBitCount := SizeOf(xMyCol)*8;
- biCompression := 0;
- biSizeImage := 0;
- biXPelsPerMeter := 0;
- biYPelsPerMeter := 0;
- biClrUsed := 0;
- biClrImportant := 0;
- end;
- Init:=True;
- end;
- procedure PutPixel(x,y: Integer; Col: xMyCol);
- begin
- move(col, preBuffer[calcTable[y]+x],3);
- end;
- function GetPixel(x,y: Integer): xMyCol;
- begin
- move(preBuffer[calctable[y]+x], result, 3);
- end;
- // ein paar weitere prozeduren später...
- procedure UpdateScreen;
- var temp: tBitmap;
- begin
- if not Init then Exit;
- temp:=tBitmap.Create;
- temp.Width:=320; temp.height:=200;
- SetDIBitsToDevice(temp.canvas.handle, 0, 0, 320, 200, 0, 0, 0, 200, @PreBuffer, BitmapInfo^, DIB_RGB_COLORS);
- fTarget.Draw(0,0,temp);
- temp.free;
- end;
- procedure FreeGraph;
- begin
- FreeMem(bitmapInfo);
- Init:=False;
- end;