{...}
Var GD,GM:Integer;
{...}
GD:=detect;
initgraph(Gd,Gm,'C:\FPC');
{Anche se non scrivo nient'altro, come faccio ad attivare (ovvero mostrare in primo piano) la finestra CRT senza usare 'Closegraph'?
Se no, si potrebbe ridurre la finestra grafica ad icona?}
{...}
Rectangle(0,0,375,883);
Delay(1000);
Closegraph;
Rectangle(375,883,999,321);
{...}
procedure TForm1.Button1Click(Sender: TObject);
Var
GD,GM:SmallInt;
begin
{...}
{...}
GD:=detect;
GM:=detect;
initgraph(Gd,Gm,'C:\FPC');
{Anche se non scrivo nient'altro, come faccio ad attivare (ovvero mostrare in primo piano) la finestra CRT senza usare 'Closegraph'?
Se no, si potrebbe ridurre la finestra grafica ad icona?}
Rectangle(0,0,375,883);
delay(10000);
[b] Closegraph;
initgraph(Gd,Gm,'C:\FPC');
[/b] Rectangle(375,883,999,321);
end;
Var
GD,GM:SmallInt;
begin
{...}
{...}
GD:=detect;
GM:=detect;
initgraph(Gd,Gm,'C:\FPC');
{Anche se non scrivo nient'altro, come faccio ad attivare (ovvero mostrare in primo piano) la finestra CRT senza usare 'Closegraph'?
Se no, si potrebbe ridurre la finestra grafica ad icona?}
Rectangle(0,0,375,883);
delay(10000);
[b] //Closegraph;[/b]
initgraph(Gd,Gm,'C:\FPC');
Rectangle(375,883,999,321);
{...}
Initgraph(Gd,Gm,'C:\FPC');
Rectangle(0,0,10,10);
dealy(10000);
Gd:=detect;
Initgraph(Gd,Gm,'C:\FPC');
Rectangle(10,10,20,20);
{...}
Ma facendo una ficerca, traducendo qualche pagina del freepascal originale, ho capito che "Deletegraph" é una specie di clrscr per grafica e così si risolve uno dei miei due problemi.
(rectangle(0,0,10,10); delay(1000); deletegraph; rectangle(10,10,20,20);)
Ho capito.
Pensavo fosse un programma per tradurre immagini in un'elenco di coordinate, sarebbe davvero bello un programma così!
A questo punto sono io che non credo di aver capito il problema ;D
Perché usare un programma esterno? Con fcl-image si può caricare qualsiasi tipo di immagine in memoria, accedere al canvas, alla palette, leggere e scrivere pixel, ecc.
http://wiki.freepascal.org/fcl-image
A questo punto sono io che non credo di aver capito il problema ;D
Perché usare un programma esterno? Con fcl-image si può caricare qualsiasi tipo di immagine in memoria, accedere al canvas, alla palette, leggere e scrivere pixel, ecc.
http://wiki.freepascal.org/fcl-image
program project1;
{$mode objfpc}{$H+}
uses
Classes, sysutils,
FPimage, FPCanvas, FPImgCanv,
FPWritePNG, FPReadPNG, // per scrivere e leggere files PNG
FPWriteBMP; // per scrivere files BMP
procedure CreaPrimaImmagine;
var
image : TFPCustomImage;
canvas : TFPcustomCanvas;
writer : TFPCustomImageWriter;
begin
// creiamo l'immagine
image := TFPMemoryImage.create(100, 100);
// creiamo un canvas attaccato a image da modificare
canvas := TFPImageCanvas.create(image);
// creiamo un oggetto writer di tipo PNG
// per scrivere l'immagine sul disco
writer := TFPWriterPNG.create;
// impostiamo gli attributi per la scrittura sul canvas
canvas.Pen.Mode := pmCopy;
canvas.Pen.Style := psSolid;
canvas.Pen.Width := 3;
canvas.Pen.FPColor := FPColor(65535, 0, 65535, 65535);
// disegniamo un rettangolo
canvas.Rectangle(10, 10, 60, 60);
// salviamo l'immagine su file
image.SaveToFile('rettangolo_01.png', writer);
// rilasciamo le risorse
Canvas.Free;
image.Free;
writer.Free;
end;
procedure ModificaImmagine;
var
image: TFPCustomImage;
canvas : TFPcustomCanvas;
reader: TFPCustomImageReader;
writer: TFPCustomImageWriter;
begin
// creiamo l'immagine
Image := TFPMemoryImage.Create(100, 100);
// creiamo un canvas attaccato a image da modificare
canvas := TFPImageCanvas.create(image);
// creiamo un reader PNG per leggere l'immagine da disco
Reader := TFPReaderPNG.Create;
// creiamo un writer BMP per salvare l'immagine su disco
writer := TFPWriterBMP.Create;
// carichiamo l'immagine da disco
Image.LoadFromFile('rettangolo_01.png', Reader);
// impostiamo gli attributi per la scrittura sul canvas
canvas.Pen.Mode := pmCopy;
canvas.Pen.Style := psSolid;
canvas.Pen.Width := 1;
canvas.Pen.FPColor := FPColor(0, 0, 65535, 65535);
// tracciamo una circonferenza
canvas.Ellipse(50, 50, 70, 70);
// coloriamo alcuni pixel di bianco
canvas.Colors[80, 80] := FPColor(65535, 65535, 65535, 65535);
canvas.Colors[80, 81] := FPColor(65535, 65535, 65535, 65535);
canvas.Colors[80, 82] := FPColor(65535, 65535, 65535, 65535);
canvas.Colors[80, 83] := FPColor(65535, 65535, 65535, 65535);
// salviamo l'immagine BMP su file
image.SaveToFile('rettangolo_02.bmp', writer);
// rilasciamo le risorse
canvas.Free;
image.Free;
reader.Free;
writer.Free;
end;
begin
WriteLn('Esempio di utilizzo di fpimage');
WriteLn('Premere un tasto...');
ReadLn;
WriteLn('Creazione dell''immagine di partenza...');
CreaPrimaImmagine;
WriteLn('Fatto! L''immagine PNG è stata salvata su file.');
WriteLn('Premere un tasto...');
ReadLn;
WriteLn('Modifica dell''immagine di partenza e salvataggio in un altro formato...');
ModificaImmagine;
WriteLn('Fatto! L''immagine è stata modificata e salvata su file di tipo BMP.');
WriteLn('Premere un tasto per terminare.');
ReadLn;
end.
Ahhhhhhh, ora credo di avere capito cosa ti serve :D
Hai bisogno di una libreria che si appoggi su directx o opengl. Io ti consiglio di dare un'occhiata a SDL:
http://freepascal-meets-sdl.net/
int SDL_Init(Uint32 flags)
{
#if !SDL_THREADS_DISABLED && SDL_THREAD_PTH
if (!pth_init()) {
return -1;
}
#endif
/* Clear the error message */
SDL_ClearError();
/* Initialize the desired subsystems */
if ( SDL_InitSubSystem(flags) < 0 ) {
return(-1);
}
/* Everything is initialized */
if ( !(flags & SDL_INIT_NOPARACHUTE) ) {
SDL_InstallParachute();
}
return(0);
}
int SDL_Init(Uint32 flags);
function SDL_Init(flags:Uint32):longint;cdecl;external 'SDL';