Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
ponchic
-4 / 2 / 1
Регистрация: 21.03.2015
Сообщений: 133
1

Как создать Bitmap нарисованного Graphics?

03.11.2015, 11:33. Просмотров 551. Ответов 2
Метки нет (Все метки)

Пишу свои ножницы, форма - это прозрачный прямоугольник нарисованный Graphics->FillPolygon
Мне нужно чтобы при нажатии на кнопку (Комбинации клавиш) делался Bitmap этого прямоугольника и его можно было сохранить. Пожалуйста помогите! Толковых примеров не нашёл
Form1.h:

C++
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#pragma once
#include <windows.h>
 
namespace SnippingTool {
 
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
 
    /// <summary>
    /// Сводка для Form1
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: добавьте код конструктора
            //
        }
 
    protected:
        /// <summary>
        /// Освободить все используемые ресурсы.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }
 
    protected: 
 
    protected: 
 
    protected: 
 
    protected: 
 
    private:
        /// <summary>
        /// Требуется переменная конструктора.
        /// </summary>
        System::ComponentModel::Container ^components;
 
#pragma region Windows Form Designer generated code
        /// <summary>
        /// Обязательный метод для поддержки конструктора - не изменяйте
        /// содержимое данного метода при помощи редактора кода.
        /// </summary>
        void InitializeComponent(void)
        {
            this->SuspendLayout();
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::None;
            this->ClientSize = System::Drawing::Size(277, 261);
            this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::SizableToolWindow;
            this->KeyPreview = true;
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->TransparencyKey = System::Drawing::Color::Transparent;
            this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
            this->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &Form1::Form1_Paint);
            this->KeyUp += gcnew System::Windows::Forms::KeyEventHandler(this, &Form1::Form1_KeyUp);
            this->Resize += gcnew System::EventHandler(this, &Form1::Form1_Resize);
            this->ResumeLayout(false);
 
        }
#pragma endregion
    private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {       
             }
    private: System::Void Form1_Paint(System::Object^  sender, 
                 System::Windows::Forms::PaintEventArgs^  e) 
             {
                 // Событие перерисовки экранной формы:
                 //this->ClientSize = System::Drawing::Size(240, 200);
                 // Устанавливаем вершины треугольника:
                 System::Drawing::Rectangle workingRectangle = Screen::PrimaryScreen->WorkingArea;
                 
                 this->Text = "Press Alt + Prt Sc for make screenshot";
                 
                 Point p1 = Point(workingRectangle.Height + workingRectangle.Width, 0);
                 Point p2 = Point(0, 0);
                 Point p3 = Point(0, workingRectangle.Height + workingRectangle.Width);
                 Point p4 = Point(workingRectangle.Height + workingRectangle.Width, workingRectangle.Height + workingRectangle.Width);
                 // Инициализируем массив точек:
                 array<Point> ^ Точки = { p1, p2, p3, p4 };
                 
 
                 // Рисуем закрашенный цветом ControlDark многоугольник:
                 e->Graphics->FillPolygon(gcnew SolidBrush(
                     SystemColors::ControlDark), Точки);
                 // Задаем цвет, который будет выглядеть прозрачным:
                 this->TransparencyKey = SystemColors::ControlDark;
 
 
             }
    
    private: System::Void Form1_Resize(System::Object^  sender, System::EventArgs^  e) {
                Refresh();
             }
 
                 
 
    private: System::Void Form1_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {
if (e->KeyCode == Keys::PrintScreen) {
 
    //СОБСТВЕННО ЗДЕСЬ (иЛИ НЕ ЗДЕСЬ) ДОЛЖЕН БЫТЬ КОД СОЗДАНИЯ Bitmap'a прямоугольника
                     System::Threading::Thread::Sleep(1000);
                     Close();
 
 
                 }
         
}
    
    
};
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2015, 11:33
Ответы с готовыми решениями:

создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap
Взялся за GDI, столкнулся с проблемой. Есть &quot;бегущая строка&quot;, она движется...

Как удалить объект Bitmap
Делаю рисовалку и в обработчике события пишу: // вывзывается при...

Как получить Bitmap из HBITMAP
Вот такой код должен получать снимак экрана и выводить его в pictureBox HDC...

Как загрузить Bitmap в Image^ из ресурсов?
Как загрузить Bitmap в Image^ из ресурсов?

Image или Bitmap как в них рисовать?
Как нарисовать например в Image несколько Polygon? например если рисовать...

2
ПерС
431 / 356 / 322
Регистрация: 05.11.2013
Сообщений: 1,008
Записей в блоге: 6
Завершенные тесты: 1
04.11.2015, 14:55 2
пример (№ 6)
0
ponchic
-4 / 2 / 1
Регистрация: 21.03.2015
Сообщений: 133
05.11.2015, 11:26  [ТС] 3
Цитата Сообщение от ПерС Посмотреть сообщение
пример (№ 6)
Не помогло, вместо того что внутри прозрачного квадрата в БО записывается серый прямоугольник, я так понел невозможно сделать битмап такого прозрачного прямоугольника
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private: System::Void Form1_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {
if (e->KeyCode == Keys::PrintScreen) {
    System::Threading::Thread::Sleep(1000);
 
//Сделал вот так
    Bitmap^ Image = gcnew Bitmap(this->Width, this->Height);
    Clipboard::SetDataObject(Image, true);
    
    //СОБСТВЕННО ЗДЕСЬ (иЛИ НЕ ЗДЕСЬ) ДОЛЖЕН БЫТЬ КОД СОЗДАНИЯ Bitmap'a прямоугольника
                     
                 Close();
 
 
                 }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.11.2015, 11:26

Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)?
Как преобразовать Bitmap (System::Drawing::Image) в IplImage*frame (openCV)

Как преобразовать Graphics в Bitmap
Как преобразовать Graphics в Bitmap

Как определить относится ли объект Graphics к данному Bitmap
Привет все! Например есть вот такой код: void Main() { Bitmap b1 = new...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru