Program do rysowania coś w rodzaju painta

0

Witam Jestem studentem 1 roku Inf. Otrzymałem od prowadzonego na zaliczenie program do rysowania dla małych dzieci. I jako że w tym semestrze miałem 1 styczność z programowaniem proszę o pomoc.

1.Jak zapisać rys z PaintBoxa po przez użycie OpenPictureDialog.
OpenPictureDialog.InitialDir:='C:\Users\Public\Pictures\Rys';
if OpenPictureDialog.Execute then
PaintBox.XXXX.LoadFromFile(OpenPictureDialog.FileName)

w miejscu XXXX nie wiem co mam umieścić.

podejrzewam że będę miał więcej problemów, czym bardziej się będę zaglebial w program

0

Picture

0

PaintBox.Picture.SaveToFile(...) - zapisywanie, analogicznie z otwieraniem. Rysować to chyba umiesz, TCanvas - do rysowania. PaintBox też takie coś ma. PictureBox.Canvas.(...) - różne metody do rysowania.

0

mam następujący problem mój program musi posiadać opcje przeglądania obrazów najlepiej w tabeli w okonie TImage. Tak aby automatycznie się ładowało do tablicy przy starcie systemu. i przełączać ja kolejno z pomocą guzików

0

Proponuję postawić na formę TListBox i załadować nazwy obrazów, po wyborze jednego ładować ten obraz do TImage. (w ten sposób przeglądać)

Zakładając że w ListBoxie są aktualne nazwy obrazów:

Image1.LoadFromFile(ListBox1.ItemIndex);

W ItemIndex jest aktualnie wybrana linijka typu String.

0

1.Są opcje typu Canvas do :
Pędzel Olejny,Pióro,Spray, Wypełnienie,Gumka, Kwadrat z zaokrągleniem i bez, Flamaster,Trójkąt
Jeśli nie da w Convas do czekam na propozycje jak to rysować.

PaintBox.Canvas.Pen.Color:=ColorGrd......;
jest to kod przypisuj kolor do 'pędzla' według książki która mam powinno być to słowo ForegroundColor ale wyskakuje błąd.

if SavePictureDialog.Execute then
PaintBox.Picture.SaveToFile(SavePictureDialog.FileName);

tu również występuję błąd, lecz według książki jest dobrze. Kompilator podkreśla Picture.SaveToFile

  1. Jest to kod odczytu co prawda odczytuje lecz muszę jeszcze to tak zrobić aby obraz automatycznie dopasował się do rozwarów okna. A nie wiem jak to zrobić.

procedure TForm1.SBOtworzClick(Sender: TObject);
var
bitmapa:TBitmap;
begin
{bitmapa:=TBitmap.Create;
OpenPictureDialog.InitialDir:='C:\Users\Public\Pictures\Rys';
if OpenPictureDialog.Execute then
bitmapa.LoadFromFile(OpenPictureDialog.FileName);
bitmapa.SetSize(PaintBox.Width,PaintBox.Height);
bitmapa.Canvas.
PaintBox.Canvas.Draw(1,1,bitmapa)}
end;

0

Za trudną uczelnie sobie wybrałeś, jak masz zrobić Painta, a nie googlujesz i nie znasz podstaw. Przeanalizuj sobie kod dołaczony do tego postu, nie jest to ideał, bo pisane późną porą, ale przynajmniej będziesz wiedział jak załadowac Jpeg do PaintBoxa i go zapisać. Rysowanie i inne rzeczy poszukaj sobie w google, mi się już nie chciało, sam cośtam googlowałem, ale pewnie da się znaleźć gdzieś prosty edytor, tylko nie wiem czy oparty musi być akurat na PaintBoxie, widziałęm chyba kiedyś jakieś kody, że można było sobie rysować po TImage równie dobrze, bo w którymś Delphi chyba w Demos był jakiś prosty edytor do rysowania - o ile mnie pamięć nie myli. Bo dla PaintBoxa trzeba obsłużyć procedurę rysowania, bo po minimalizacji formatki i ponownym jej przywróceniu obraz zniknie, w TImage odchodzą takie problemy i jest Stretch.

0

Bardziej by mi zależało na 1 pkt. bo nie mam pojęcia jak to zrobić

0

Wiem jak zrobić kwadratowy Spray.

procedure TForm1.ImageOnMouseMove(Sender: TObject;
  var {Nie pamiętam co tu jest};
var I: Integer;
const
  Gr = 50;  //Grubosc Pedzla
  Ges= 100;  //Gęstość Pedzla
begin
  for I := 1 to Ges do
    begin
      X2 := Random(Gr);
      Y2 := Random(Gr); 
      Image1.Picture.Canvas.Pixels[X + X2 - (Gr div 2), Y + Y2 - (Gr div 2)] := clBlack;
    end;
end;
0

dzięki. na pewno się przyda.
jakoś sobie tam zacząłem radzić ale mimo wszystko mam problemy np:

  1. Jak rysuje kwadrat to zostają 'smugi'(pozostałości kresek po ruszaniu myszką). mój kot wygląda tak na rysowanie wiem że jest błąd w procedurze MouseMove jednak nie wiem co w niej zapisać aby było bez 'smug'.

procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MB:=true;
P:=Point(X,Y);

Image2.Canvas.Rectangle(X,Y,P.X,P.Y);

end;

procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Image2.Canvas.Rectangle(P.X,P.Y,X,Y)
end;

  1. Jak wypełnić pola procedury kwadrata wypełnionego, czyli co ma być w tym ().
    Image2.Canvas.RoundRect(........)

3.no i czy jest możliwość malowania samą fikcją Brush, jeśli tak to jak to zrobić

proszę o szybką pomoc bo termin oddania pracy mam na worek 21.Czerwca.
z Góry dziękuję.

0

Chodzi Ci o to że

  1. Klikasz
  2. Ruszasz myszą, aż wybierzesz dobry kształt kwadratu
  3. Puszczasz
  4. Kwadrat się pojawia na stale
    Tak? No to mam fajny pomysł, rób tak:
    1 Do globalnej Bitmapy wczytaj aktualny stan TImage.
    2 W OnMouseDown zapisz do globalnego TPoint'a (Pkt) współrzędne myszy, a do globalnego Bool'a (Bo) daj True.
    3 W OnMouseMove daj
if Bo then
  begin
    Image1.Canvas.Draw(0, 0, MojaBitmapa);
    Image1.Rectancle(Pkt.X, Pkt.Y, X, Y);
  end;

4 W OnMouseUp daj

Bo := False;
0

no i jeszcze chodzi o wypełnianie tak jak w paicie

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