![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохраненеие картинки из paintbox
alexdn © (2013-04-05 09:11:00)Вот для timage есть такое, там всё простенько -
Image1.Picture.Bitmap.SaveToFile(name);
а вот что делать для tpaintbox, там похоже нет такого, т.е. так не напишешь -
paintbox1.Picture.Bitmap.SaveToFile(name);
alexdn (2013-04-13 11:51:00) [1]ужо понятно - Display.Transparent:= True;
alexdn (2013-04-13 11:01:00) [2]Вот как то странно всё получилось, почему на PaintBox не накладываются сразу два битмапа, получается главный рисунок вообще не виден -
procedure TForm4.PaintBox1Paint(Sender: TObject);
var BitMap:TBitMap;
LenL, LenR: LongInt;
begin
DrawPicture(PaintBox1.Canvas); //1, здесь непосредственно создаётся главный рисунок
//2, наклаываемое окно -
Display := TBitmap.Create;
Display.Width := PaintBox1.Width;
Display.Height:= PaintBox1.Height;
// Чистим канву.
Display.Canvas.Brush.Color:= clWhite;
Display.Canvas.FillRect(Display.Canvas.ClipRect);
// Рисуем окно.
Display.Canvas.Pen.Width:= 2;
Display.Canvas.Pen.Color:= clBlack;
Display.Canvas.Brush.Color:= clRed;
Display.Canvas.Rectangle(GetRectWindow);
Display.Canvas.Pen.Width:= 2;
Display.Canvas.Pen.Color:= clBlack;
// Выводим.
PaintBox1.Canvas.Draw(0, 0, Display);
Display.Free;
//3, дверь - накладываемый рисунок
if (Unit_Main.sdv<>0) or (Unit_Main.sok<>0) then BitMap:=TBitMap.Create;
if Unit_Main.sdv<>0 then
begin
// Загрузка в BitMap выбранного графического файла
BitMap.LoadFromFile('picture/dv.bmp');
// Перенос изображения на канву формы
paintbox1.Canvas.Draw(round(dl-65),round(hp-130)+round(ver),BitMap);
// Уничтожение объекта BitMap
end;
if (Unit_Main.sdv<>0) {or (Unit_Main.sok<>0)} then BitMap.Free;
end;
alexdn (2013-04-12 21:28:00) [3]> Amoeba_ (11.04.13 11:40) [26]
Заработало, передалась канва как параметр).
Афонтий (2013-04-12 16:23:00) [4]Если вы планируете сохранять или прокручивать картинку - ну и используйте TImage, TPaintBox для других целей, вообще непонятных мне..
alexdn (2013-04-11 12:16:00) [5]> Amoeba_ (11.04.13 11:40) [26]
Спасибо, вполне возможно будет применено..
Дмитрий С (2013-04-11 12:04:00) [6]
> теперь чтоб напечатать, перерисовывать всё надо
А что в этом плохого? Нормальное явление.
Ega23 (2013-04-11 11:46:00) [7]Удалено модератором
Amoeba_ (2013-04-11 11:40:00) [8]
> alexdn © (11.04.13 09:43) [25]
>
> > Amoeba_ (10.04.13 16:42) [22]
> А как передавать канву как параметр, что то я пока не очень
> представляю..
Мрак... ну просто клинический случай. Придется разжевать.
procedure DrawMyPicture(Canvas: TCanvas);
begin
with Canvas do
begin
... //здесь выполняем ВСЁ рисование как на PaintBox так и на Bitmap
end;
end;
Рисуем на PaintBox в его OnPaint так
DrawMyPicture(PaintBox.Canvas);
Рисуем на Bitmap и сохраняем его в специальном методе так
TempBitmap := TBitmap.Create;
try
DrawMyPicture(TempBitmap.Canvas);
TempBitmap.SaveToFile(FileName);
finally
TempBitmap.Free;
end;
alexdn (2013-04-11 09:43:00) [9]> Amoeba_ (10.04.13 16:42) [22]
А как передавать канву как параметр, что то я пока не очень представляю..
alexdn (2013-04-10 20:15:00) [10]Нет, там или image.canvas или paintbox.canvas, рефакторить тоже не выход, вон теперь чтоб напечатать, перерисовывать всё надо.. Amoeba_ (10.04.13 16:42) [22], возможно это и хороший выход.
Vegeta (2013-04-10 19:32:00) [11]
> Amoeba_ (10.04.13 16:42) [22]
Там же стопицот Form1.Canvas.foo(). А рефакторить код вагонки - это смерти подобно.
Amoeba_ (2013-04-10 16:42:00) [12]
> alexdn © (10.04.13 16:16) [21]
>
> Да и прорисовать тем же кодом довольно сложно, кода много.
>
Чего тут может быть сложного? Подумаешь, "кода много". Да хоть архимного. Поделюсь секретом. Вынеси код рисования из OnPaint в отдельную процедуру и рисуй вызывая ее где необходимо, передавая в нее Canvas.
alexdn (2013-04-10 16:16:00) [13]Да и прорисовать тем же кодом довольно сложно, кода много.
alexdn (2013-04-10 15:48:00) [14]> Amoeba_ (10.04.13 11:10) [19]
> Пусть покажет свой код, которым он создает рисунок на Bitmap'е.
(с)(r)
Amoeba_ (2013-04-10 11:10:00) [15]
> PaintBox рисует только то, что находится в видимой области
Это и пьяному ежу понятно ...
ТС кажись не понял, что я ему советую. Имелось в виду НЕ КОПИРОВАТЬ на Bitmap с PaintBox.Canvas, а с нуля НАРИСОВАТЬ на его Canvas тем же самым кодом, что на PaintBox.
Пусть покажет свой код, которым он создает рисунок на Bitmap'е.
icWasya (2013-04-10 09:53:00) [16]>Amoeba_ (09.04.13 22:26) [17]
Вот BitMap можно сделать большего размера чем видимая область, а PaintBox рисует только то, что находится в видимой области.
Amoeba_ (2013-04-09 22:26:00) [17]А что мешает сделать PaintBox б ольшего размера чем видимая область и положить его на ScrollBox?
alexdn (2013-04-09 21:41:00) [18]вот точнее - http://s017.radikal.ru/i413/1304/aa/e9271fd895ce.jpg
alexdn (2013-04-09 21:39:00) [19]> Amoeba_ (09.04.13 21:20) [14]
Так так и делается
> width := PaintBox1.Width;
> height := PaintBox1.Height;
но канва PaintBox может быть видна не вся, тогда и сохраняется только то, что видно на форме в данный момент - http://s019.radikal.ru/i614/1304/39/bed7b7408cd1.bmp
Amoeba_ (2013-04-09 21:20:00) [20]Так создавай такого размера Bitmap, и рисуй на нем так, чтобы на нем поместилось всё.