Сохраненеіе картинки з 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;