Форум: "Начинающим";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];
ВнизСохраненеие картинки из paintbox Найти похожие ветки
← →
alexdn © (2013-04-05 09:11) [0]Вот для timage есть такое, там всё простенько -
Image1.Picture.Bitmap.SaveToFile(name);
а вот что делать для tpaintbox, там похоже нет такого, т.е. так не напишешь -paintbox1.Picture.Bitmap.SaveToFile(name);
← →
Ega23 © (2013-04-05 10:09) [1]У TPaintBox есть canvas
← →
alexdn © (2013-04-05 10:15) [2]> Ega23 © (05.04.13 10:09) [1]
PaintBox3.Canvas.SaveToFile(name); тоже не идёт, подчёркивает SaveToFile
← →
Ega23 © (2013-04-05 10:52) [3]facepalm
← →
Amoeba_ (2013-04-05 11:15) [4]
> что делать для tpaintbox
Создаешь впеменный Bitmap, рисуешь на на его Canvas то же самое, сохраняешь и уничтожаешь его.
← →
Игорь Шевченко © (2013-04-05 12:10) [5]зачем оно тебе, это программирование?
← →
alexdn © (2013-04-05 12:14) [6]> Игорь Шевченко © (05.04.13 12:10) [5]
Да вот же ж всё строю и строю http://www.youtube.com/watch?v=FPCAs34ARKM
← →
Ega23 © (2013-04-05 12:27) [7]
> Да вот же ж всё строю и строю
facepalm
← →
Игорь Шевченко © (2013-04-05 12:33) [8]alexdn © (05.04.13 12:14) [6]
Найми программиста, заплати денег. Всяко лучше, чем сайт безвозмездно нанимать
← →
alexdn © (2013-04-05 12:35) [9]Удалено модератором
← →
clickmaker © (2013-04-05 12:38) [10]Удалено модератором
← →
alexdn © (2013-04-05 13:08) [11]Удалено модератором
← →
alexdn © (2013-04-09 19:36) [12]> Amoeba_ (05.04.13 11:15) [4]
> Создаешь впеменный Bitmap, рисуешь на на его Canvas то же
> самое, сохраняешь и уничтожаешь его.
Вот интересно получилось, а если величина tpaintbox больше экрана, т.е. картинка вся туда не помещается, соответственно значит и картинку (всю) на временный Bitmap перенести нельзя? -with TBitMap.Create do begin
width := PaintBox1.Width;
height := PaintBox1.Height;
bitblt(canvas.Handle,0,0,width,height,PaintBox1.Canvas.Handle,0,0,srcCopy);
SaveToFile(name);
end;
← →
alexdn © (2013-04-09 19:37) [13]Т.е. получилось так, сохраняется только то, что видно.
← →
Amoeba_ (2013-04-09 21:20) [14]Так создавай такого размера Bitmap, и рисуй на нем так, чтобы на нем поместилось всё.
← →
alexdn © (2013-04-09 21:39) [15]> Amoeba_ (09.04.13 21:20) [14]
Так так и делается
> width := PaintBox1.Width;
> height := PaintBox1.Height;
но канва PaintBox может быть видна не вся, тогда и сохраняется только то, что видно на форме в данный момент - http://s019.radikal.ru/i614/1304/39/bed7b7408cd1.bmp
← →
alexdn © (2013-04-09 21:41) [16]вот точнее - http://s017.radikal.ru/i413/1304/aa/e9271fd895ce.jpg
← →
Amoeba_ (2013-04-09 22:26) [17]А что мешает сделать PaintBox большего размера чем видимая область и положить его на ScrollBox?
← →
icWasya © (2013-04-10 09:53) [18]>Amoeba_ (09.04.13 22:26) [17]
Вот BitMap можно сделать большего размера чем видимая область, а PaintBox рисует только то, что находится в видимой области.
← →
Amoeba_ (2013-04-10 11:10) [19]
> PaintBox рисует только то, что находится в видимой области
Это и пьяному ежу понятно ...
ТС кажись не понял, что я ему советую. Имелось в виду НЕ КОПИРОВАТЬ на Bitmap с PaintBox.Canvas, а с нуля НАРИСОВАТЬ на его Canvas тем же самым кодом, что на PaintBox.
Пусть покажет свой код, которым он создает рисунок на Bitmap"е.
← →
alexdn © (2013-04-10 15:48) [20]> Amoeba_ (10.04.13 11:10) [19]
> Пусть покажет свой код, которым он создает рисунок на Bitmap"е.
(с)(r)
← →
alexdn © (2013-04-10 16:16) [21]Да и прорисовать тем же кодом довольно сложно, кода много.
← →
Amoeba_ (2013-04-10 16:42) [22]
> alexdn © (10.04.13 16:16) [21]
>
> Да и прорисовать тем же кодом довольно сложно, кода много.
>
Чего тут может быть сложного? Подумаешь, "кода много". Да хоть архимного. Поделюсь секретом. Вынеси код рисования из OnPaint в отдельную процедуру и рисуй вызывая ее где необходимо, передавая в нее Canvas.
← →
Vegeta (2013-04-10 19:32) [23]
> Amoeba_ (10.04.13 16:42) [22]
Там же стопицот Form1.Canvas.foo(). А рефакторить код вагонки - это смерти подобно.
← →
alexdn © (2013-04-10 20:15) [24]Нет, там или image.canvas или paintbox.canvas, рефакторить тоже не выход, вон теперь чтоб напечатать, перерисовывать всё надо.. Amoeba_ (10.04.13 16:42) [22], возможно это и хороший выход.
← →
alexdn © (2013-04-11 09:43) [25]> Amoeba_ (10.04.13 16:42) [22]
А как передавать канву как параметр, что то я пока не очень представляю..
← →
Amoeba_ (2013-04-11 11:40) [26]
> 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;
← →
Ega23 © (2013-04-11 11:46) [27]Удалено модератором
← →
Дмитрий С © (2013-04-11 12:04) [28]
> теперь чтоб напечатать, перерисовывать всё надо
А что в этом плохого? Нормальное явление.
← →
alexdn © (2013-04-11 12:16) [29]> Amoeba_ (11.04.13 11:40) [26]
Спасибо, вполне возможно будет применено..
← →
Афонтий (2013-04-12 16:23) [30]Если вы планируете сохранять или прокручивать картинку - ну и используйте TImage, TPaintBox для других целей, вообще непонятных мне..
← →
alexdn © (2013-04-12 21:28) [31]> Amoeba_ (11.04.13 11:40) [26]
Заработало, передалась канва как параметр).
← →
alexdn © (2013-04-13 11:01) [32]Вот как то странно всё получилось, почему на 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-13 11:51) [33]ужо понятно - Display.Transparent:= True;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.02.16;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c