Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.06.2009, 04:57
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
Счастье PaintBox (Открыть и Сохранить)

Доброе время суток!
Итак, у меня на форме расположены:
  • PaintBox1;
  • Button1 - Открывает (загружает) фыйл (*.bmp) в PaintBox1;
  • Button2 - Сохраняет рисунок из PaintBox1 у файл.
Как реализовать открытие и сохранение файла в (из) PaintBox?

У меня написано следующее:
Код:
// Открытие файла
procedure TForm1.N2Click(Sender: TObject);
var bmp:TBitmap;
begin
  OpenDialog1.Title := 'Відкрити файл...';
  if (OpenDialog1.Execute) then
    begin
      bmp:=TBitmap.create;
      bmp.loadfromfile('D:\1.bmp');
      paintbox1.width:=bmp.width;
      paintbox1.height:=bmp.height;
      paintbox1.canvas.draw(0,0,bmp);
      bmp.Free;
    end;
end;

// Сохранение в файла
procedure TForm1.N3Click(Sender: TObject);
var bmp: TBitmap;
begin
  SaveDialog1.Title:=' Зберегти файл як...'; // заголовок вікна діалогу збереження файлу
  if SaveDialog1.Execute then
    begin
    bmp := TBitmap.Create;
    try
      bmp.Width := PaintBox1.Width;
      bmp.Height := PaintBox1.Height;
      bmp.Canvas.CopyRect(Rect(0, 0, bmp.Width, bmp.Height), Canvas, rect (0,0,PaintBox1.Width, PaintBox1.Height));
      bmp.SaveToFile(SaveDialog1.Filename);
      finally
        bmp.Free;
      end;
    end;
end;
Но результат нечто искаженный (смотри вложенный файл)
Изображения
Тип файла: jpg Untitled-1.jpg (24.8 Кбайт, 21 просмотров)

Последний раз редактировалось vah-smile, 02.06.2009 в 07:21.
Ответить с цитированием
  #2  
Старый 02.06.2009, 07:26
Аватар для vah-smile
vah-smile vah-smile вне форума
Новичок
 
Регистрация: 16.02.2009
Адрес: Украина
Сообщения: 67
Репутация: -53
По умолчанию

Похожий вопрос нашел на: http://www.delphisources.ru/forum/sh...light=PaintBox. Но там тема не решена (или же я просто не понял). У моем случаэ при наведении любого окна на рисунок (PaintBox) - даные "стираются" Что делать?

Последний раз редактировалось vah-smile, 02.06.2009 в 09:11.
Ответить с цитированием
  #3  
Старый 02.06.2009, 11:57
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

1). Для PaintBox рисование обычно пишется в OnPaint.
2). Непонятно, для чего диалог открытия, т.к. берётся готовое имя. Я немного подправил:
Код:
var bmp:TBitmap;

procedure TForm1.btnLoadClick(Sender: TObject);
begin
  OpenDialog1.Title := 'Відкрити файл...';
  if (OpenDialog1.Execute) then
    begin
      bmp:=TBitmap.create;
      bmp.loadfromfile(OpenDialog1.FileName);
      paintbox1.width:=bmp.width;
      paintbox1.height:=bmp.height;
    end;
end;

procedure TForm1.btnSaveClick(Sender: TObject);
begin
  SaveDialog1.Title:=' Зберегти файл як...';
  if SaveDialog1.Execute then
    try
      bmp.SaveToFile(SaveDialog1.Filename);
    finally
    end;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  paintbox1.canvas.draw(0,0,bmp);
end;
Ответить с цитированием
  #4  
Старый 02.06.2009, 12:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Все это фигня.
Человек просто не понимает что такое PaintBox и для чего он используется. Вообще, этот компонент в основном предназначен для отображения и фактически не умеет сохранять то, что в нем нарисовано. Поэтому обычно делают буферный итмап, на котором реально все и отрисовывается, а в PaintBox только вывод этого битмапа на экран (это если мы говорим о графическом редакторе, для других целей все немного подругому). И сохранени/загрузка производятся имено в этот битмап, а уж он потом отображается на PaintBox'е.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter