Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
1

создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap

05.03.2013, 10:45. Показов 2546. Ответов 3

Author24 — интернет-сервис помощи студентам
Взялся за GDI, столкнулся с проблемой. Есть "бегущая строка", она движется справа налево. Если перерисовывать по пикселям GetPixel-SetPixel, то работает, но всё-таки картинку 850 на 450 перерисовывает очень долго:
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
void makePic(){
    Bitmap^ pane;
    static int i=1;
    static float xsin;
                 
    if(i==1){
        pane = gcnew Bitmap(300,300);
        i++;
        for ( int Xcount = 0; Xcount < 300; Xcount++ )
        {
            for ( int Ycount = 0; Ycount < 300; Ycount++ )
            {
                pane->SetPixel( Xcount, Ycount, Color::Black );
            }
        }
        for ( int Xcount = 0; Xcount < 300; Xcount++ )
        {
            pane->SetPixel( Xcount, 150+75*sin(xsin), Color::Red );
            xsin+=0.1;
        }
    }
    else{
        pane = gcnew Bitmap(pictureBox1->Image);
        for ( int Xcount = 1; Xcount < 300; Xcount++ )
        {
            for ( int Ycount = 0; Ycount < 300; Ycount++ )
            {
                Color color1 = pane->GetPixel(Xcount,Ycount);
                pane->SetPixel( Xcount-1, Ycount, color1 );
            }
        }
        for ( int Ycount = 0; Ycount < 300; Ycount++ )
        {
            pane->SetPixel( 299,Ycount, Color::Black );
        }
        pane->SetPixel( 299, 150+75*sin(xsin), Color::Red );
        xsin+=0.1;   
    }
    pictureBox1->Image=pane;
}
Попытался сделать по следующей логике: Беру в новый Bitmap Клонирую часть старого Bitmap, не с первого, а со второго пикселя:
C++
1
2
3
4
pane = gcnew Bitmap(pictureBox1->Image);
Rectangle cloneRect = Rectangle(1,0,299,300);
format = pane->PixelFormat;
cloneBitmap = pane->Clone( cloneRect, format );
Но вот проблема:
Размер нового Bitmap автоматически становится не 300*300, а 299*300, и к нему ничего справа не дорисовать, дальше хуже, повторно клонирование области cloneRect = Rectangle(1,0,299,300); просто невозможно, по причине того, что область клонирования выходит за области Bitmap

ВОПРОС:
Как мне склонировать часть картинки и сохранить пропорции Bitmap со свободной зоной для дальнейшей дорисовки справа?

--------------------------------------
Visual Studio 2008
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2013, 10:45
Ответы с готовыми решениями:

Создание видеофайла из Bitmap-ов или разложение видеофайла на Bitmap-ы
1)Вопрос такой Есть Видео! как его программно разбить на bitmap-ы! 2)Вопрос как сделать видео...

Проблема с сохранением в bitmap
Доброе время суток! :) Загвоздка вот в чем: Как обычно сохраняю изображение из Image1 в bmp...

Как создать bitmap из области (по координатам пикселей) другого bitmap
Здравствуйте. Подскажите пожалуйста как создать bitmap из области(по координатам пикселей) другого...

Получение фото с веб камеры, занесение его в Bitmap и преобразование Bitmap в массив
В общем необходимо подключиться к веб камере сделать снимок и отправить его в сеть. Задачу я...

3
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
06.03.2013, 12:08  [ТС] 2
Так, построю вопрос по другому: Можно ли сделать bitmap или image путем "склеивания" двух картинок?
0
873 / 771 / 173
Регистрация: 11.01.2012
Сообщений: 1,942
06.03.2013, 13:24 3
Цитата Сообщение от KokosSPb Посмотреть сообщение
Можно ли сделать bitmap или image путем "склеивания" двух картинок?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 // ПЕРВАЯ ЧАСТЬ 
                 Bitmap^ firstPart = gcnew Bitmap("leo1part.jpg");
 
                 // ВТОРАЯ ЧАСТЬ
                 Bitmap^ secondPart = gcnew Bitmap("leo2part.jpg");
 
                 //  КУДА БУДЕМ ВСТАВЛЯТЬ 
                 Bitmap^ newBitmap = gcnew Bitmap(firstPart->Width * 2, firstPart->Height);
 
                 //  СОБСТВЕННО СКЛЕЙКА 
                 Graphics^ graphicsFromImage = Graphics::FromImage(newBitmap);
                 graphicsFromImage->DrawImage(firstPart, 0, 0);
                 graphicsFromImage->DrawImage(secondPart, firstPart->Width, 0);
 
                 //     ВЫВОДИМ ИЗОБРАЖЕНИЕ НА ФОРМУ 
                 Graphics^ formGraphics = this->CreateGraphics();
                 formGraphics->DrawImage(newBitmap, 10, 10);
Миниатюры
создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap   создание Clone с Bitmap меньшего размера с сохранением изначальных габаритов Bitmap  
1
128 / 86 / 10
Регистрация: 03.02.2011
Сообщений: 477
06.03.2013, 13:58  [ТС] 4
Всё, склеил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bitmap^ bm = gcnew Bitmap(300, 300);
    Bitmap^ bmOld = gcnew Bitmap("1.jpg");
    Bitmap^ bmOld1 = gcnew Bitmap("1.jpg");
    System::Drawing::Imaging::PixelFormat format;
    Rectangle cloneRect;
    cloneRect = Rectangle(0,0,150,150);
    format = bmOld->PixelFormat;
    bmOld = bmOld1->Clone( cloneRect, format );
 
    Graphics^ g = Graphics::FromImage(bm);
    g->DrawImage(bmOld, 0, 0, 150, 150);
    cloneRect = Rectangle(150,150,150,150);
    bmOld = bmOld1->Clone( cloneRect, format );
    g->DrawImage(bmOld, 150, 0, 150, 150);
    pictureBox1->Image=bm;
Добавлено через 1 минуту
да, спасибо, я уже разобрался просто забыл отправить, оставил в предпросмотре, тут посмотрел - отправил, а мне уже ответили Спасибо
1
06.03.2013, 13:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.03.2013, 13:58
Помогаю со студенческими работами здесь

Нарисовать прошлый Bitmap на новом так, чтобы небыл растянут рисунок, если новый Bitmap больше размером
Короче пытался сделать такое дело: Рисую фигуры на форме, когда отпускаю левую кнопку мыши (когда...

BitMap Основные функции + работа в Bitmap
Я наткнулся на пару проблем не известных для меня. 1. Как поставить &quot;Настройки компонента&quot;...

Изменение размера Bitmap
В компоненте используется двойная буферизация. Пытался искать уязвимые по производительности...

Происходит ли "утечка памяти" при повторном выполнении: Bitmap bm1 = new Bitmap
Здравствуйте ! Подскажите, пожалуйста, происходит ли &quot;утечка памяти&quot; при создании объекта bm1...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru