Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Сохранить содержимое PictureBox в файл. Добавлено: 04.01.09 03:29  

Автор вопроса:  Памидорко | Web-сайт: 2hl.net.ru | ICQ:
Казалось бы просто, но почему не получается?
что не так?
Посмотрел в поиске все, что связано с сохранением картинок. Ничего не получилось...



Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
        PictureBox1.CreateGraphics.DrawLine(Pens.Black, 0, 0, 50, 50)
        PictureBox1.Image.Save("c:\temp.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
    End Sub

Ответить

  Ответы Всего ответов: 29  

Номер ответа: 1
Автор ответа:
 Памидорко



ICQ:

Вопросов: 5
Ответов: 17
 Web-сайт: 2hl.net.ru
 Профиль | | #1
Добавлено: 04.01.09 03:39
VB 2005 Express Edition

Ответить

Номер ответа: 2
Автор ответа:
 Фeнягz



Вопросов: 2
Ответов: 62
 Web-сайт: atauenis.narod.ru
 Профиль | | #2
Добавлено: 04.01.09 04:09
  1.     Private Declare Ansi Function BitBlt Lib "gdi32" (ByVal hDestDC As IntPtr, _
  2.             ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
  3.             ByVal nHeight As Integer, ByVal hSrcDC As IntPtr, ByVal xSrc As Integer, _
  4.             ByVal ySrc As Integer, ByVal dwRop As Integer) As Integer
  5.  
  6.     Private Const SRCCOPY As Integer = &HCC0020&
  7.  
  8.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  9.         Dim g As Graphics = PictureBox1.CreateGraphics()
  10.         Call g.DrawIcon(Me.Icon, New Rectangle(10, 10, 50, 80))
  11.         Call g.DrawIcon(Me.Icon, New Rectangle(20, 20, 80, 50))
  12.         Call g.DrawIcon(Me.Icon, New Rectangle(30, 30, 150, 80))
  13.         Dim hdc As IntPtr = g.GetHdc()
  14.         Dim bm As New Bitmap(200, 200, Imaging.PixelFormat.Format24bppRgb)
  15.         Dim bmgraphics As Graphics = Graphics.FromImage(bm)
  16.         Dim hdc2 As IntPtr = bmgraphics.GetHdc()
  17.         Call BitBlt(hdc2, 0, 0, 200, 200, hdc, 0, 0, SRCCOPY)
  18.         Call bmgraphics.ReleaseHdc(hdc2) : Call bmgraphics.Dispose()
  19.         Call g.ReleaseHdc(hdc)
  20.         Call bm.Save("c:\PictureBox1.png", Imaging.ImageFormat.Png)
  21.         Call bm.Dispose()
  22.     End Sub

Ответить

Номер ответа: 3
Автор ответа:
 Памидорко



ICQ:

Вопросов: 5
Ответов: 17
 Web-сайт: 2hl.net.ru
 Профиль | | #3
Добавлено: 04.01.09 04:27
спасибо! все работает...
и еще вопрос... после того, как поверх окна с работающей программой перетащишь любое окно все Graphics в пикчурбоксе исчезают... как сделать, чтобы они не исчезали??? refresh???? 0_o

Ответить

Номер ответа: 4
Автор ответа:
 Фeнягz



Вопросов: 2
Ответов: 62
 Web-сайт: atauenis.narod.ru
 Профиль | | #4
Добавлено: 04.01.09 06:42
Тогда организуй всю прорисовку в процедуре Paint.

Ответить

Номер ответа: 5
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #5 Добавлено: 04.01.09 11:34
ЯЯЯ, а нафига эти извращения с API в данном случае???

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 04.01.09 11:37
у него в коде банальная ошибка потому и не работает.. а API тут по какой фиг?

Ответить

Номер ответа: 7
Автор ответа:
 Памидорко



ICQ:

Вопросов: 5
Ответов: 17
 Web-сайт: 2hl.net.ru
 Профиль | | #7
Добавлено: 04.01.09 13:46
скажите мне, какая у меня там банальная ошибка.

Ответить

Номер ответа: 8
Автор ответа:
 Памидорко



ICQ:

Вопросов: 5
Ответов: 17
 Web-сайт: 2hl.net.ru
 Профиль | | #8
Добавлено: 04.01.09 13:56
а еще лучше, как выглядит код без ошибки

Ответить

Номер ответа: 9
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #9 Добавлено: 04.01.09 14:36
скажите мне, какая у меня там банальная ошибка.

ты рисуешь на PictureBox1, а сохраняешь PictureBox1.Image - это два разных контекста! На чем рисуешь то и сохраняй! ;-)

как выглядит код без ошибки

С#

        private void button1_Click(object sender, EventArgs e)
        {
            //' Это на тот случай если в pictureBox1 нет картинки
            if (pictureBox1.Image == null)
            {
                //' создаем новую по размерам pictureBox1
                Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                //' делаем ее видимой
                pictureBox1.Image = bitmap;
            }

            //' Создаем объект Graphics для картинки чтоб можно
            //' было на ней рисовать.
            using (Graphics graphics = Graphics.FromImage(pictureBox1.Image))
            {
                //' заливаем фон
                graphics.Clear(Color.Black);
                //' рисуем(пишем) какую нибудь фигню
                graphics.DrawString("Малевич: \"Черный квадрат\"",
                                    this.Font,
                                    Brushes.White,
                                    graphics.VisibleClipBounds);
            }

            //' ну и сохраняем наше творчество для потомков
            pictureBox1.Image.Save(@"c:\temp.jpg", ImageFormat.Jpeg);
        }


вот как то так ...

Ответить

Номер ответа: 10
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #10 Добавлено: 04.01.09 14:38
сорри.. с тегами чего то напутал
  1.  
  2.         private void button1_Click(object sender, EventArgs e)
  3.         {
  4.             //' Это на тот случай если в pictureBox1 нет картинки
  5.             if (pictureBox1.Image == null)
  6.             {
  7.                 //' создаем новую по размерам pictureBox1
  8.                 Bitmap bitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);
  9.                 //' делаем ее видимой
  10.                 pictureBox1.Image = bitmap;
  11.             }
  12.  
  13.             //' Создаем объект Graphics для картинки чтоб можно
  14.             //' было на ней рисовать.
  15.             using (Graphics graphics = Graphics.FromImage(pictureBox1.Image))
  16.             {
  17.                 //' заливаем фон
  18.                 graphics.Clear(Color.Black);
  19.                 //' рисуем(пишем) какую нибудь фигню
  20.                 graphics.DrawString("Малевич: \"Черный квадрат\"",
  21.                                     this.Font,
  22.                                     Brushes.White,
  23.                                     graphics.VisibleClipBounds);
  24.             }
  25.  
  26.             //' ну и сохраняем наше творчество для потомков
  27.             pictureBox1.Image.Save(@"c:\temp.jpg", ImageFormat.Jpeg);
  28.         }

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 04.01.09 14:47
сделать, чтобы они не исчезали???

либо рисовать на картинке, как я показал выше. Либо переопределять процедуру OnPaint и все рисовать там (как уже говорил ЯЯЯ)

Ответить

Номер ответа: 12
Автор ответа:
 Памидорко



ICQ:

Вопросов: 5
Ответов: 17
 Web-сайт: 2hl.net.ru
 Профиль | | #12
Добавлено: 04.01.09 15:08
огромное спасибо!

почему вот только в школе такому не учат?

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 04.01.09 15:15
почему вот только в школе такому не учат?

а тебе что, школьных предметов мало?

Ответить

Номер ответа: 14
Автор ответа:
 Памидорко



ICQ:

Вопросов: 5
Ответов: 17
 Web-сайт: 2hl.net.ru
 Профиль | | #14
Добавлено: 04.01.09 20:04
на C# все работает...
  1. pictureBox1.Image.Save(@"c:\temp.jpg", ImageFormat.Jpeg);

пришлось переписать так:
  1. pictureBox1.Image.Save(@"c:\temp.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);


а вот с VB проблемы....
не получилось перевести эту строчку на VB2005
  1. using (Graphics graphics = Graphics.FromImage(pictureBox1.Image))


а тебе что, школьных предметов мало?

предметы предметами, а курсач писать надо...

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 04.01.09 20:56
пришлось переписать так:

Просто тебе надо было в самом верху добавить директиву Imports System.Drawing.Imaging
не получилось перевести эту строчку

точно не помню, а Vb нету под рукой.. но наверное как то так
  1. Using graphics As Graphics = Graphics.FromImage(pictureBox1.Image)
  2. ' ... you code here
  3. End Using

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам