Gem af billede...

Tags:    delphi

Hej udd.
Udenset hvor flovt det er ved jeg ikke hvordan man gemmer et billede som er i image1, i mappen hvor alle filerne ligger i med navnet der står i en label1.

Og husk at det er et billede. Resten skal jeg nok klare!!!


Skriv hurtigt.

5 up, vis i skriver enden en time med et svar... ellers 3!!!

Theis F. Hinz
(Shafh)
Theisf@stofanet.dk


Man kommer aldrig vider, vis alle er enige...



10 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Prøv dette her...

procedure TForm1.Timer1Timer(Sender: TObject);
var
Jpg : TJpegImage;
Present: TDateTime;
Hour, Min, Sec, MSec: Word;
S : string;
begin
//Finder tidspunkt!
Present:= Now;
DecodeTime(Present, Hour, Min, Sec, MSec);

//Finder stien til applikationen
S := ExtractFileDir(Application.ExeName)+'\\';
//Genere en filnavn
S := S+IntToStr(Hour)+'-'+IntToStr(Min)+'-'+IntToStr(Sec)+'.JPG';

//Konventere Bitmap til Jpeg
Image1.Picture.Bitmap := GetScreenShot;
Jpg := TJpegImage.Create;
try
Jpg.Assign(Image1.Picture.Bitmap);
//Gemmer billede
if (Length(ExtractFileDir(S)) <> 0) and (Length(ExtractFileExt(S)) <> 0) then
Jpg.SaveToFile(S);
finally
Jpg.Free;
end;

... man lære ellers bedst ved selv at prøve sig frem Theis!!!!

end;




Jeg tror det er dette du mener:

Image1.Picture.SaveToFile(Label1.Caption);



Her er en mere sikker måde. Denne funktion sikre sig at stien er gyldig før den gemmer!


if Length(ExtractFileDir(Label1.Caption)) <> 0 then
Image1.Picture.SaveToFile(Label1.Caption)
else
ShowMessage('Billedet blev ikke gemt');



og dette er en endnu mere sikker måde. Denne funktion sikre sig at stien OG FILENS EFTERNAVN er gyldige før den gemmer!


if (Length(ExtractFileDir(Label1.Caption)) <> 0) and (Length(ExtractFileExt(Label1.Caption)) <> 0) then
Image1.Picture.SaveToFile(Label1.Caption)
else
ShowMessage('Billedet blev ikke gemt');

[Redigeret d. 25/03-04 16:27:38 af Søren Klit Lambæk]



Har prøvet, min kode ser sådan ud:

function GetScreenShot: TBitmap;
var
Desktop: HDC;
begin
Result := TBitmap.Create;
Desktop := GetDC(0);
try
try
Result.PixelFormat := pf32bit;
Result.Width := Screen.Width;
Result.Height := Screen.Height;
BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY);
Result.Modified := True;
finally
ReleaseDC(0, Desktop);
end;
except
Result.Free;
Result := nil;
end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var
S: string;
begin
Image1.Picture.Bitmap := GetScreenShot;
S := Timetostr(time);
label1.Caption := S+'.gif';
Image1.Picture.SaveToFile(Label1.Caption+'.jpg');


-------------------------------

Prøv selv og se. Det denne kode skulle gøre er at lave et screenshot, hente det ind i image1 og så gemme det som klokkeslættet det blev taget...


Kan du se der er noget galt?

Theis F. Hinz
(Shafh)
Theisf@stofanet.dk


Man kommer aldrig vider, vis alle er enige...



Jeg lavede lige en lille test med en knap...

procedure TForm1.Button1Click(Sender: TObject);
begin

Image1.Picture.Bitmap := GetScreenShot;
if (Length(ExtractFileDir(Label1.Caption)) <> 0) and (Length(ExtractFileExt(Label1.Caption)) <> 0) then
Image1.Picture.SaveToFile(Label1.Caption);

end;

I min Label1 står der C:\\Test.BMP

Det virker!



Hvis du vil gemme det som en Jpeg fil så tilføj "Jpeg" under uses:

procedure TForm1.Button1Click(Sender: TObject);
var
Jpg : TJpegImage;
begin
Image1.Picture.Bitmap := GetScreenShot;
Jpg := TJpegImage.Create;
try
Jpg.Assign(Image1.Picture.Bitmap);
if (Length(ExtractFileDir(Label1.Caption)) <> 0) and (Length(ExtractFileExt(Label1.Caption)) <> 0) then
Jpg.SaveToFile(Label1.Caption);
finally
Jpg.Free;
end;

I min Label1 står der nu: C:\\Test.JPG

Og det virker også!

[Redigeret d. 25/03-04 16:43:33 af Søren Klit Lambæk]



Hej.
Det er fint, men det var ikke helt det jeg vil have.
Filen skal hedde klokkeslættet .jpg noget andet der kan åbnes i mspaint.
Og udover det skal den gemmes i den mappe hvor programmet ligger. Okay?
Og det er vil blive sådan at hvis du får den til at gemme den under klokkeslættet, så vil den lave flere små filer.
Og det er det den skal.

Forstår du mig?

Hvis vi ikke når at skrive et svar enden kl 17:05 så svare jeg om ca. 2 timer...




Theis F. Hinz
(Shafh)
Theisf@stofanet.dk


Man kommer aldrig vider, vis alle er enige...



Du bør nok være forsigtigt med at gemme med et interval på mindre end et sekund i din TTimer! Da det tager lidt tid at konventere fra Bitmap format til Jpeg format og samtidig tager det også lidt tid at gemme selve billedet ned på din harddisk. Desuden ville jeg ikke bruge en TImage men en TBitmap istedet, da det vil gøre dit program væsentligt hurtigere, da en TBitmap ikke er en visuelt komponent!

SIDSTE POST FRA I DENNE TRÅD!



hmmm.
Jo, man lære af at prøve selv, det er heller ikke det jeg siger. Men har jeg sagt at jeg ikke har gjordt det? Jeg har minimum brugt 20 min på at finde frem til koden. Men ak.
Og det du siger går ikke rigtigt, helt igennem.
Du kan ikke bare sætte der ned, med delphi og sige at nu vil jeg lære delphi, hvis man intet ved om delphi. Man skal først lære, prøve. Prøve igen, lære, prøve. Og prøve, og hvis du ikke kan må du spørre eller lærer!!!

Det virker. Tak.
Men ved ikke hvad Tbitmap kompomentet ligger!!!
Så det gør jeg ikke...

Du får de 5 up...

Tak igen!


Theis F. Hinz
(Shafh)
Theisf@stofanet.dk


Man kommer aldrig vider, vis alle er enige...

[Redigeret d. 25/03-04 19:25:43 af Theis]



t