Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.02.16;
Скачать: CL | DM;

Вниз

Сохраненеие картинки из 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.007 c
2-1366377417
mefodiy
2013-04-19 17:16
2014.02.16
Не удаляется значение ключа реестра


15-1378130372
Кристина
2013-09-02 17:59
2014.02.16
Странности Delphi 2010


2-1366454807
clix
2013-04-20 14:46
2014.02.16
stringlist, воборка данных из строки


2-1365768017
__
2013-04-12 16:00
2014.02.16
Что может быть с системой если после int 3 спасает только Reset


2-1365850104
Катерина
2013-04-13 14:48
2014.02.16
Чтение из файла в ComboBox