mam pytanie dotyczące paintboxa. czy ktoś mógłby mi powiedzieć, jak zapisać obrazek narysowany na canvie do pliku? chodzi mi konkretnie o procedurę w języku pascalowym. z góry dziękuję za pomoc:)
ta, a krowy lataja
var
b: TBitmap;
begin
b := TBitmap.Create;
b.Width := pb1.Width;
b.Height := pb1.Height;
b.Canvas.CopyRect(Rect(0, 0, b.Width, b.Height), pb1.Canvas, Rect(0, 0, b.Width, b.Height));
b.SaveToFile('c:\a.bmp');
end;
var
BM :TBitmap;
begin
// tworzysz obiekt typu TBitmap
BM := TBitmap.Create();
// Ustalasz rozmiary takie same jak paint boxa.
BM.Width := PaintBox1.Width;
BM.Height := PaintBox1.Height;
// Kopiujesz fragment obrazu
with PaintBox1 do
BM.Canvas.CopyRect(Rect(0,0, Width, Height),
Canvas,
Rect(0,0, Width, Height));
// Zapisujesz do pliku
BM.SaveToFile('D:\PLIK.BMP');
// Zwalniasz pamięć dla TBitmap
BM.Free();
end;
// dopisane MisiekD był szybszy
Dzięki wielkie:) a czy da się zrobić, żeby można było wybierać plik docelowy i rozszerzenie?
co do wybierania nazwy to SaveDialog + F1 (SaveDialog.Execute i SaveDialog.FileName)
co do wybierania rozszezenia to nie taka prosta sprawa, bo zeby zapisac jako JPG to trzeba najpierw na JPGa przekonwertowac (jest w google czy tez na stronie jak)
nie bardzo rozumiem ten motyw z SaveDialog... bo w PaintBoxie rysuję na canvie i nigdzie nie wstawiam tego okienka dialogowego...
No właśnie. Wstaw to będzie można używać SaveDialoga do wyboru miejsca docelowego.
tylko że obrazek rysowany jest na canvie. To gdzie mam wstawić Image, żebym mogła korzystać z SaveDialog?
Julka, kompletnie nie wiem co kombinujesz. TSaveDialog jest tak samo komponentem jak TPaintBox, z tą różnicą, że jest to komponent niewidzialny. Umieszcza się go na formie tak samo jak całą resztę. Do jego wywołania służy funkcja Execute. SaveDialog ma własność FileName, która zawiera ścieżkę dostępu i nazwę zapisywanego pliku. Generalnie użwya się tego tak (wklejam fragment mojej procedury):
procedure TStatystyka.mnZapiszjakoClick(Sender: TObject);
begin
with SavePictureDialog1 do
begin
if Execute then // Execute zwraca True jeżeli wciśnięto OK
begin
case FilterIndex of // w zależności jaki typ pliku user wybrał
{ BMP } 1: ParetoChart.SaveToBitmapFile(FileName+'.bmp');
{ EMF } 2: ParetoChart.SaveToMetafileEnh(FileName+'.emf');
{ WMF } 3: ParetoChart.SaveToMetafile(FileName+'.wmf');
end; // case..of
end; // if Execute
end; // with SavePictureDialog1
end; // mnZapiszJakoClick
Przeanalizuj i pokombinuj
chodzi mi po prostu o to, żeby rysunek utworzony w PaintBox.Canvas zapisać do pliku i żeby można było przy tym ręcznie wybrać plik docelowy i rozszerzenie...
julka... napisał(a)
chodzi mi po prostu o to, żeby rysunek utworzony w PaintBox.Canvas zapisać do pliku i żeby można było przy tym ręcznie wybrać plik docelowy i rozszerzenie...
julka tak jak wyzej napisano - wlasnie wczoraj/przedwczoraj przechodzilem przez to pierwszy raz w zyicu i sie da - nie jest to trudne i awykonalne wstaw po prostu do formy cos co sie zwie SaveDialog.
Pozniej sobie jakis przycisk wstaw na form i kliknij go tak zeby zapisac procedure OnClick (dotyczacy tego przycisku) i w niej musisz wlasnie wpisac wykonanie tego okienka zapisywania. Ja mam to tak:
procedure TForm1.ZapiszJPGClick(Sender: TObject); // Procedura zapisu obrazu
var
NazwaPliku : String; // NazwaPliku - zmienna nazwy pliku - nazwa pliku w systemie operacyjnym
Bitmapa:TBitmap;
JPG : TJPEGImage;
begin
Bitmapa:=TBitmap.Create;
JPG:= TJPEGImage.Create;
Bitmapa.width:=form1.Wykres.Width;
Bitmapa.height:=form1.Wykres.Height;
bitmapa.Canvas.CopyRect(Rect(0,0,Form1.Wykres.Width,Form1.Wykres.Height),
Form1.Wykres.Canvas,Rect(0,0,Form1.Wykres.Width,Form1.Wykres.Height));
// Kopiowanie zawartosci plotna do bitmapy
JPG.Performance:=jpBestQuality;
JPG.CompressionQuality:=80;
JPG.Assign(bitmapa); // Przypisanie bitmapy do jpg
if DialogZapisz.Execute then
begin
NazwaPliku := DialogZapisz.FileName; // Tworzenie pliku - odpowiada za zapis danych w pliku
JPG.SaveToFile(DialogZapisz.FileName);
end;
JPG.free; // Destruktor - uwolnienie pamieci
Bitmapa.free; // Destruktor - uwolnienie pamieci
end;
Pewnie mnostwo bledow i na okolo ale dziala :D Ten napis Wykres to nazwa mojego Paintboxa, a przycisk mi sie zwie ZapiszJPG jak co polecam sie gg:1385137 - pewnie nie wiele wiecej od Ciebie julka znam sie na Delphi ale sprobowac pomoc zawsze moge :D