Сохраненеіе картинки з paintbox

Сохраненеіе картинки з paintbox

Ось для timage є таке, там все простенько -
Image1.Picture.Bitmap.SaveToFile (name);
а ось що робити для tpaintbox, там схоже немає такого, тобто так не напишеш -
paintbox1.Picture.Bitmap.SaveToFile (name);

У TPaintBox є canvas


> Що робити для tpaintbox

Створюєш впеменний Bitmap, малюєш на на його Canvas те ж саме, зберігаєш і губиш його.

навіщо воно тобі, це програмування?

Найми програміста, заплати грошей. Всяко краще, ніж сайт безоплатно наймати

Тобто вийшло так, зберігається тільки те, що видно.

Так створюй такого розміру Bitmap, і малюй на ньому так, щоб на ньому помістилося все.

А що заважає зробити PaintBox бо льшего розміру ніж видима область і покласти його на ScrollBox?

> Amoeba_ # XA0; (09.04.13 22:26) [17]
Ось BitMap можна зробити більшого розміру ніж видима область, а PaintBox малює тільки те, що знаходиться у видимій області.


> PaintBox малює тільки те, що знаходиться у видимій області

Це і п'яному їжаку зрозуміло.

ТС кажись не зрозумів, що я йому раджу. Малося на увазі НЕ КОПІЮВАТИ на Bitmap з PaintBox.Canvas, а з нуля НАМАЛЮВАТИ на його Canvas тим же самим кодом, # XA0; що на PaintBox.

Нехай покаже свій код, яким він створює малюнок на Bitmap "е.

> Amoeba_ (10.04.13 11:10) [19]
> Нехай покаже свій код, яким він створює малюнок на Bitmap "е.
(С) (r)

Та й промальовувати тим же кодом досить складно, коду багато.


> Amoeba_ (10.04.13 16:42) [22]

Там же стопицот Form1.Canvas.foo (). А рефактору код вагонки - це смерті подібно.

Ні, там або image.canvas або paintbox.canvas, рефактору теж не вихід, он тепер щоб надрукувати, перемальовувати все треба. Amoeba_ # XA0; (10.04.13 16:42) [22], можливо це і хороший вихід.

> Amoeba_ (10.04.13 16:42) [22]
А як передавати канву як параметр, що то я поки не дуже уявляю ..

procedure DrawMyPicture (Canvas: TCanvas);
begin
# XA0; with Canvas do
# XA0; begin
# XA0; # XA0 ;. // тут виконуємо ВСЕ малювання як на PaintBox так і на Bitmap
# XA0; end;
end;

Малюємо на PaintBox в його OnPaint так
DrawMyPicture (PaintBox.Canvas);

Малюємо на Bitmap і зберігаємо його в спеціальному методі так
TempBitmap: = TBitmap.Create;
try
# XA0; DrawMyPicture (TempBitmap.Canvas);
# XA0; TempBitmap.SaveToFile (FileName);
finally
# XA0; TempBitmap.Free;
end;


> Тепер щоб надрукувати, перемальовувати все треба

А що в цьому поганого? Нормальне явище.

> Amoeba_ (11.04.13 11:40) [26]
Спасибі, цілком можливо буде застосовано ..

Якщо ви плануєте зберігати або прокручувати картинку - ну і використовуйте TImage, TPaintBox для інших цілей, взагалі незрозумілих мені ..

> Amoeba_ (11.04.13 11:40) [26]
Запрацювало, передалася канва як параметр).

Ось як то дивно все вийшло, чому на PaintBox не накладаються відразу два бітмапами, виходить головний малюнок взагалі не видно -
procedure TForm4.PaintBox1Paint (Sender: TObject);
var BitMap: TBitMap;
# XA0; LenL, LenR: LongInt;
begin
DrawPicture (PaintBox1.Canvas); // 1, тут безпосередньо створюється головний # XA0; малюнок
// 2, наклаиваемое вікно -
# XA0; Display # XA0; # XA0; # XA0; : = TBitmap.Create; # XA0;
# XA0; Display.Width: = PaintBox1.Width;
# XA0; Display.Height: = PaintBox1.Height;

# XA0; // Чистимо канву.
# XA0; Display.Canvas.Brush.Color: = clWhite;
# XA0; Display.Canvas.FillRect (Display.Canvas.ClipRect);

# XA0; // Малюємо вікно.
# XA0; Display.Canvas.Pen.Width: = 2;
# XA0; Display.Canvas.Pen.Color: = clBlack;
# XA0; Display.Canvas.Brush.Color: = clRed;
# XA0; Display.Canvas.Rectangle (GetRectWindow);

# XA0; Display.Canvas.Pen.Width: = 2;
# XA0; Display.Canvas.Pen.Color: = clBlack;

# XA0; // Виводимо.
# XA0; PaintBox1.Canvas.Draw (0, 0, Display);
# XA0; Display.Free;

// 3, двері - накладається малюнок
if (Unit_Main.sdv<>0) or (Unit_Main.sok<>0) then BitMap: = TBitMap.Create;
if Unit_Main.sdv<>0 then
begin
# XA0; // Завантаження в BitMap обраного графічного файлу
# XA0; BitMap.LoadFromFile ( "picture / dv.bmp");
# XA0; // Перенесення зображення на канву форми
# XA0; paintbox1.Canvas.Draw (round (dl-65), round (hp-130) + round (ver), BitMap);
# XA0; // Знищення об'єкта BitMap
end;

ужо зрозуміло - Display.Transparent: = True;