Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290

Не сохраняется изображение

22.03.2013, 17:25. Показов 3229. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
 
Var
  myForm: System.Windows.Forms.Form;
  GraphBox: System.Drawing.Graphics;
  Pictures: System.Windows.Forms.PictureBox;
  x, y: integer;
 
Procedure MenuSaveClick(sender:object; args:System.EventArgs);
  Begin
    Var sd := new System.Windows.Forms.SaveFileDialog;
      sd.Filter := 'Png |*.png|Jpeg |*.jpg|Gif |*.gif|Bmp |*.bmp|Tiff |*.tiff';
      sd.FilterIndex := 1;
    Var bmp:=new System.Drawing.Bitmap (  
      If sd.ShowDialog=System.Windows.Forms.DialogResult.OK Then 
       Begin
         Var format: System.Drawing.Imaging.ImageFormat;
          Case sd.FilterIndex of 
           1: format := System.Drawing.Imaging.ImageFormat.Png;
           2: format := System.Drawing.Imaging.ImageFormat.Jpeg;
           3: format := System.Drawing.Imaging.ImageFormat.Gif;
           4: format := System.Drawing.Imaging.ImageFormat.Bmp;
           5: format := System.Drawing.Imaging.ImageFormat.Tiff;
        End;   
        
        Pictures.Image.Save (sd.FileName,format);
      End;  
  End;
 
procedure OnMouseDown(sender: object; e: System.Windows.Forms.MouseEventArgs);
    begin
      x := e.x;
      y := e.y;
    end; 
 
    procedure OnMouseMove(sender: object; e: System.Windows.Forms.MouseEventArgs);
    begin
      if e.Button = System.Windows.Forms.MouseButtons.Left then 
      begin
        GraphBox.DrawLine(new System.Drawing.Pen(System.Drawing.Color.FromARGB(PABCSystem.Random(255),PABCSystem.Random(255),PABCSystem.Random(255))),x,y,e.x,e.y);
        x := e.x;
        y := e.y;
      end;
    end; 
 
Begin
  myForm := new System.Windows.Forms.Form;
  
 
      
  var toolStrip1 := new System.Windows.Forms.ToolStrip;
  toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden;
  var miFile := new System.Windows.Forms.ToolStripMenuItem('Файл');  
  miFile.DropDownItems.Add(new System.Windows.Forms.ToolStripMenuItem('Сохранить как...',nil,MenuSaveClick));
  toolStrip1.Items.Add(miFile);
  myForm.Controls.Add(toolStrip1);
  
  Pictures:= new System.Windows.Forms.PictureBox;
  Pictures.Size:=new System.Drawing.Size(200,800);
  
  myForm.Controls.Add (Pictures);
 
  GraphBox:=System.Drawing.Graphics.FromHwnd (Pictures.Handle);
  GraphBox.SmoothingMode:=System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
  
  Pictures.MouseDown    += OnMouseDown;
Pictures.MouseMove  += OnMouseMove;
  
      
  System.Windows.Forms.Application.Run(myForm);
end.
Почему то, что я нарисовал не сохраняется? Где ошибка?

Добавлено через 23 часа 39 минут
Может кто знает через конструктор. Я находил много исходников, но там не только процесс сохранения но целые проги, и с конструкторами. Вытащить оттуда это для меня сложновато.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2013, 17:25
Ответы с готовыми решениями:

Не сохраняется изображение
Здравствуйте, нужно сделать графический редактор. В принципе все готово, но не работает сохранение после рисования, вместо рисунка черный...

Неправильно сохраняется изображение!
Здравствуйте, форумчане! Написал небольшой код, суть такова: Он смотрит на картинку, делит ее на фрагменты, находит среднее из...

Не сохраняется изображение в файл
Есть 2 файла: 1.bmp и 2.bmp. Загружаю в программу первый файл 1.bmp-работает. Дорисовываю на загруженном изображении...

19
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
22.03.2013, 21:56
serёга, эмм, у меня вообще не запускается...
Миниатюры
Не сохраняется изображение  
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 13:25  [ТС]
Это не важно, мне бы знать сам алгоритм сохранения в файл содержимого Graphics.

Добавлено через 3 минуты
Что касается ошибки, удалите стоку перед выделенным.
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 13:46
serёга, ошибка выдаётся потому, что вы не присвоили Pictures.Image ничего т.е Pictures.Image пустой, следовательно его нельзя сохранить.
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 13:49  [ТС]
А как его туда присвоить?
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 13:50
serёга, без понятия
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 14:15  [ТС]
Я тоже. Исходников много а толку не какого. Там ничего не понятно
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 14:35
serёга, вот посмотрите:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
uses
  System.Windows.Forms,
  System.Drawing;
 
var
  myForm: System.Windows.Forms.Form;
  GraphBox: System.Drawing.Graphics;
  Pictures: System.Windows.Forms.PictureBox;
  Bm: Bitmap;
  X, Y, cX, cY: integer;
  Down: boolean := False;
 
procedure MenuSaveClick(sender: object; args: System.EventArgs);
begin
  var sd := new System.Windows.Forms.SaveFileDialog;
  sd.Filter := 'Png |*.png|Jpeg |*.jpg|Gif |*.gif|Bmp |*.bmp|Tiff |*.tiff';
  sd.FilterIndex := 1; 
  if sd.ShowDialog = System.Windows.Forms.DialogResult.OK Then 
  begin
    var format: System.Drawing.Imaging.ImageFormat;
    case sd.FilterIndex of 
      1: format := System.Drawing.Imaging.ImageFormat.Png;
      2: format := System.Drawing.Imaging.ImageFormat.Jpeg;
      3: format := System.Drawing.Imaging.ImageFormat.Gif;
      4: format := System.Drawing.Imaging.ImageFormat.Bmp;
      5: format := System.Drawing.Imaging.ImageFormat.Tiff;
    End;   
    
    Pictures.Image.Save(sd.FileName, format);
  end;  
end;
 
procedure OnMouseDown(sender: object; e: System.Windows.Forms.MouseEventArgs);
begin
  Down := True;
  
  X := MyForm.Left;
  Y := MyForm.Top;
  
  cX := System.Windows.Forms.Cursor.Position.X;
  cY := System.Windows.Forms.Cursor.Position.Y;
end;
 
procedure OnMouseUp(sender: object; args: System.Windows.Forms.MouseEventArgs);
begin
  Down := False;
end;
 
procedure OnMouseMove(sender: object; e: System.Windows.Forms.MouseEventArgs);
begin
  if Down then
  begin
    Bm.SetPixel(System.Windows.Forms.Cursor.Position.X - cX + X, System.Windows.Forms.Cursor.Position.Y - cY + Y, Color.Red);
    Pictures.Image := Bm;
  end;
end;
 
begin
  myForm := new System.Windows.Forms.Form;
  
  
  
  var toolStrip1 := new System.Windows.Forms.ToolStrip;
  toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden;
  var miFile := new System.Windows.Forms.ToolStripMenuItem('Файл');  
  miFile.DropDownItems.Add(new System.Windows.Forms.ToolStripMenuItem('Сохранить как...', nil, MenuSaveClick));
  toolStrip1.Items.Add(miFile);
  myForm.Controls.Add(toolStrip1);
  
  Bm := new Bitmap('123.png');
  
  Pictures := new System.Windows.Forms.PictureBox;
  Pictures.Size := new System.Drawing.Size(200, 800);
  Pictures.Image := Bm;
  
  myForm.Controls.Add(Pictures);
  
  GraphBox := System.Drawing.Graphics.FromHwnd(Pictures.Handle);
  GraphBox.SmoothingMode := System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
  
  
  Pictures.MouseDown    += OnMouseDown;
  Pictures.MouseMove  += OnMouseMove;
  Pictures.MouseUp += OnMouseUp;
  
  
  System.Windows.Forms.Application.Run(myForm);
end.
Конечно рисует не очень (мягко говоря ) но зато сохраняет.

P.S. Что бы запустить закиньте в папку с программой вот эту картинку.
Изображения
 
1
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 16:08  [ТС]
Спасибо большое, но я немного не понял 123.png - картинка которая загружается в начале в PictureBox?

Добавлено через 4 минуты
Что-то Microsoft.net ругается, что-то с параметром x не так. не знаете-ли?
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 16:16
Цитата Сообщение от serёга Посмотреть сообщение
Спасибо большое, но я немного не понял 123.png - картинка которая загружается в начале в PictureBox?
Картинка загружается в Bitmap (на котором рисуем), а уже Bitmap присваивается PictureBox.
Цитата Сообщение от serёга Посмотреть сообщение
Что-то Microsoft.net ругается, что-то с параметром x не так. не знаете-ли?
Это происходит когда X становится больше чем PictureBox.Width. Как я и говорил там особо не порисуешь, нужен более совершенный алгоритм
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 16:41  [ТС]
А с класса Graphics можно как-нибудь "Выдрать" bitmap?
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 16:44
serёга, я пробовал из Graphics "выдрать" рисунок для PictureBox - ничё не получилось... Для Bitmao не пробовал, попробуйте вы
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 16:52  [ТС]
Что-то и не пойму как это сделать. Это какой-то функцией нужно воспользоваться?
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 17:27
serёга, в том то и дело что
Цитата Сообщение от BaboshinSD Посмотреть сообщение
без понятия
Попробуйте погуглить примеры на других языках (Delphi, C# и пр.) может что-то найдёте.
1
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 18:53  [ТС]
А что, если создать цикл в цикле, двумерный массив где будут координаты x, y и обычный массив типа Color.
Тогда при сохранении каждый пиксель запишется в наши массивы, а потом создаётся bitmap и все символы подобным образом запишутся в него, а потом и сохранится. Думаю прога тупить немного будет зато можно будет сохранить и рисовать нормально.

Добавлено через 1 минуту
Только теперь нужно сдирать каждый пиксель с Graphics.
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
23.03.2013, 18:55
Цитата Сообщение от serёга Посмотреть сообщение
А что, если создать цикл в цикле, двумерный массив где будут координаты x, y и обычный массив типа Color.
Тогда при сохранении каждый пиксель запишется в наши массивы
Заново создаёте формат .bmp, но попробовать можно)
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 19:10  [ТС]
Ок. я уже начал. А содрать пиксель с graphics по его координатам?
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
23.03.2013, 23:12  [ТС]
Как?

Добавлено через 3 часа 46 минут
BaboshinSD, я рыл инет и ничего не нашёл подходящего. Исходников мало, некоторые я уже видел, но они написаны очень сложно. Эта процедура тормозит мою работу над прогой вцелом. так как я хотел добавить функцию сохранения. И я начал работу именно с ней.
0
 Аватар для BaboshinSD
349 / 288 / 49
Регистрация: 15.11.2012
Сообщений: 477
Записей в блоге: 1
24.03.2013, 01:02
serёга, у меня было несколько примеров с сохранением картинки. Посмотрю их, попробую сам написать, если что получится вам скину с комментариями.
0
 Аватар для serёга
47 / 42 / 12
Регистрация: 27.08.2012
Сообщений: 290
24.03.2013, 15:10  [ТС]
Ок. Я пока полазею в стандартных модулях, ведь там можно сохранять изображение.

Добавлено через 1 час 18 минут
BaboshinSD, у меня прогресс! Уже сохраняется изображение только прозрачное, но зато без ошибок и рисовать можно.

Добавлено через 4 часа 19 минут
Вы просто не представляете какой у меня всплеск эмоции.
Я сделал это!
Вот код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
{$apptype windows}
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
Var
  myForm: System.Windows.Forms.Form;
  g: System.Drawing.Graphics;        {Вырисовка на экране}
  gr: System.Drawing.Graphics;       {Вырисовка в "буффере"}
  x, y : integer;
  bmap: System.Drawing.Bitmap;
{==================================================================================================}
Function GetView(b: System.Drawing.Bitmap; r: System.Drawing.Rectangle): System.Drawing.Bitmap; {функцию взял из стандартного модуля GraphABCHelper}
   Var w,h,stride,padding,pixelFormatSize: integer;
       ptr,start: System.IntPtr;
       rect: System.Drawing.Rectangle;
       bmpData: System.Drawing.Imaging.BitmapData;
     Begin
       w := b.Width;
       h := b.Height;
       rect := new System.Drawing.Rectangle(0,0,w,h);
       bmpData := b.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, b.PixelFormat);
       ptr := bmpData.Scan0;
       b.UnlockBits(bmpData);
       pixelFormatSize := System.Drawing.Image.GetPixelFormatSize(b.PixelFormat) div 8;
       r := System.Drawing.Rectangle.Intersect(r,rect);
       start := (System.IntPtr)(integer(ptr) + w * pixelFormatSize * r.Y + r.X * pixelFormatSize);
       stride := w * pixelFormatSize;
       padding := stride mod 4;
        If padding<>0 Then 
            stride := stride + 4 - padding;
       Result := new System.Drawing.Bitmap(r.Width,r.Height,stride,b.PixelFormat,start);
     End;
{==================================================================================================}
Procedure SaveWindow(fname: string); {Взял из модуля GraphABC}
   Begin
     Var tempbmp := GetView(bmap,new System.Drawing.Rectangle(0,0,myForm.Width,myForm.Height));
     tempbmp.Save(fname);
     tempbmp.Dispose;
   End;
{==================================================================================================} 
Procedure MenuSaveClick(sender: object; args: System.EventArgs);
  Begin
    Var sd := new System.Windows.Forms.SaveFileDialog;
    sd.Filter := 'Png |*.png|Jpeg |*.jpg|Gif |*.gif|Bmp |*.bmp|Tiff |*.tiff';
    sd.FilterIndex := 1; 
     If sd.ShowDialog = System.Windows.Forms.DialogResult.OK Then Begin
       Var s: string;
        Case sd.FilterIndex of 
          1: s:='.png';
          2: s:='.jpg';
          3: s:='.gif';
          4: s:='.bmp';
          5: s:='.tiff';
        End;   
       SaveWindow (sd.FileName+s);
      End;  
   End;
{==================================================================================================}    
Procedure OnMouseDown(sender: object; e: System.Windows.Forms.MouseEventArgs);
    Begin
      x := e.x;
      y := e.y;
    End; 
{==================================================================================================}     
Procedure OnMouseMove(sender: object; e: System.Windows.Forms.MouseEventArgs);
    Begin
      If e.Button = System.Windows.Forms.MouseButtons.Left Then 
      Begin
        gr.DrawLine(new System.Drawing.Pen(System.Drawing.Color.Black),x,y,e.x,e.y);
        g.DrawLine(new System.Drawing.Pen(System.Drawing.Color.Black),x,y,e.x,e.y);
        x := e.x;
        y := e.y;
      End;
    End;
{==================================================================================================}  
Begin
  myForm := new System.Windows.Forms.Form;
  myForm.Size:= new System.Drawing.Size (800, 600);
  Var toolStrip1 := new System.Windows.Forms.ToolStrip;
  toolStrip1.GripStyle := System.Windows.Forms.ToolStripGripStyle.Hidden;
  Var miFile := new System.Windows.Forms.ToolStripMenuItem('Файл');  
  miFile.DropDownItems.Add(new System.Windows.Forms.ToolStripMenuItem('Сохранить как...', nil, MenuSaveClick));
  toolStrip1.Items.Add(miFile);
  myForm.Controls.Add(toolStrip1);
 
  bmap := new System.Drawing.Bitmap(myForm.Width, myForm.Height); //
  g := System.Drawing.Graphics.FromHwnd(myForm.Handle);                // Взял из модуля GraphABC; 
  gr := System.Drawing.Graphics.FromImage(bmap);                           //
 
  myForm.MouseDown    += OnMouseDown;
  myForm.MouseMove  += OnMouseMove;
  System.Windows.Forms.Application.Run(myForm);
End.
Прога и рисует и сохраняет (сохраняет, правда, долговато). Нужно было ввести две переменных graphics и покапать стандартные модули.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.03.2013, 15:10
Помогаю со студенческими работами здесь

Не сохраняется изображение из pictureBox
Мне нужно сохранить изображение из pictureBox2 в .bmp файл. Но сохраняется только серый фон, вместо нужного изображения. Что я сделал не...

Не сохраняется файл, как изображение
привет всем! я не могу сохранить файл, как картинку. вернее сохраняется,но ее не видно на рабочем столе!что делать?:(пыталась сохранять в...

Drawstring: изображение сохраняется некачественным
Image img = new Bitmap(790, 1230); Graphics g = Graphics.FromImage(img); Rectangle fillRect = new...

Изображение не сохраняется в базу данных
Я использую mysql. Пытаюсь сохранить картинку в базу, вот код: if($_FILES==0&amp;&amp;$_POST){ funcsql(&quot;insert into `img`(`imgcol`)...

Не сохраняется изображение png в файл
Доброго времени суток! Не получается записать изображение в файл. cropButtonSlot получает координаты прямоугольника, по форме которого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru