paintbox [zapis do pliku]

0

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:)

0

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;
0
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

0

Dzięki wielkie:) a czy da się zrobić, żeby można było wybierać plik docelowy i rozszerzenie?

0

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)

0

nie bardzo rozumiem ten motyw z SaveDialog... bo w PaintBoxie rysuję na canvie i nigdzie nie wstawiam tego okienka dialogowego...

0

No właśnie. Wstaw to będzie można używać SaveDialoga do wyboru miejsca docelowego.

0

tylko że obrazek rysowany jest na canvie. To gdzie mam wstawić Image, żebym mogła korzystać z SaveDialog?

0

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

0

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...

0
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

1 użytkowników online, w tym zalogowanych: 0, gości: 1