Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/47: Рейтинг темы: голосов - 47, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
1

C #, скопировать часть одной Bitmap в другую

28.01.2010, 01:29. Показов 9265. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, люди добрые, не оставте в печали, пожалуйста.
Имею наглое желание скопировать изображение размером 100х100 из Bitmap Background(600,600) в Bitmap Copia(100,100). Возможно ли использование Bitblt для этой цели, и если возможно, то каким образом? Не знаю как «прицепиться» к Background, поскольку GetHdc ссылку на память не даёт. Если Bitblt не работает, то какими средствами возможно осуществить желаемое?
Заранее признателен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2010, 01:29
Ответы с готовыми решениями:

Скопировать таблицу из одной БД в другую БД
Доброго времени суток. Я расширил свою программу и случилось так что все нужные данные находятся в...

Скопировать строку из одной таблицы в другую
всем привет) сразу перейду к делу. значит,есть форма : на этой вкладке показаны,как вы...

Скопировать файл из одной папки в другую
Как скопировать 1 (нужный мне) рисунок из одной папки в другую?, если адрес рисунка храниться в...

Как из PictureBox или из Bitmap скопировать часть картинки
есть ли в C# аналог метода CopyRect() в delphi, т.е. что бы с pictureBox1 или из bitmap скопировать...

11
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.01.2010, 09:00 2
C#
1
2
3
4
5
6
7
8
9
10
11
    private Bitmap tmp(Bitmap image, int _x, int _y, int _w, int _h)
    {
        Bitmap newBmp = new Bitmap(_w, _h);
        for (int i = 0; i < _w; i++)
            for (int j = 0; j < _h; j++)
                if (_x + i < image.Width & _y + j < image.Height)
                    newBmp.SetPixel(i, j, image.GetPixel(_x + i, _y + j));
                else
                    newBmp.SetPixel(i, j, Color.Black);
        return newBmp;
    }
Добавлено через 3 минуты
где
_x, _y координаты с которых в Background(600,600) начинается нужный нам отрывок.
_w, _h размеры отрывка.
image данный Background(600,600)
newBmp искомый Copia(100,100)

всталена проверка на выход отрывка за пределы Background, за пределом Background цвет взял черный.
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 11:46  [ТС] 3
Извиняюсь за неточное объяснение, копирование квадрата хочу произвести в памяти, а не на экране
0
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.01.2010, 11:55 4
так и я не с экрана читаю...
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 12:04  [ТС] 5
Извините, спросонья не разобрался, у нас только 9 часов.

Спасибо за помощь
0
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.01.2010, 12:14 6
а нас 12)

всегда пожалуйста
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 13:39  [ТС] 7
Ещё вопрос: а возможен перенос сразу построчно, а не попиксельно, или это всё равно осуществляется через GetPixel?
0
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.01.2010, 13:50 8
к сожалению только так...
хотя...

Добавлено через 3 минуты
C#
1
2
3
4
5
6
    private Bitmap tmp2(Bitmap image, int _x, int _y, int _w, int _h)
    {
        Bitmap newBmp = new Bitmap(_w, _h);
        Graphics grph = Graphics.FromImage(newBmp);
        grph.DrawImage(image, -_x, -_y);
    }
так мона. даже быстрее будет)
0
4338 / 1507 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
28.01.2010, 13:51 9
Работайте с массивом, Set\GetPixel очень медленные
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 15:23  [ТС] 10
Цитата Сообщение от HIMen Посмотреть сообщение
Работайте с массивом, Set\GetPixel очень медленные
Не могли бы Вы привести хотя бы один малю-ю-юсенький примерчик, если это не сложно?
0
4338 / 1507 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
28.01.2010, 15:29 11
C#
1
2
3
4
5
6
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, bmp.PixelFormat);
byte[] rgb = new byte[bmpData.Stride * bmpData.Height];
Marshal.Copy(bmpData.Scan0, rgb, 0, rgb.Length);
далее по индексам 0 - B 1 - G 2 - R 3 если есть A и т.д.
Marshal.Copy(rgb, 0, bmpData.Scan0, bmpData.Stride * bmpData.Height);
bmp.UnlockBits(bmpData);
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 18:45  [ТС] 12
Большое спасибо вам обоим за помощь
0
28.01.2010, 18:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2010, 18:45
Помогаю со студенческими работами здесь

Скопировать контролы из одной tabpage в другую
Приветы! Нужно скопировать все контролы из одной tabpage в другую. Пытался поработать с этим...

Скопировать id с одной таблицы на другую таблицу другую форму
Добрый день! Подскажите, как и где написать,чтобы id с одной таблицы скопировался в другую таблицу...

Скопировать часть строки в другую строку
Здравствуйте. Подскажите пожалуйста как можно это сделать Необходимо копировать часть строки в...

Скопировать часть содержимого ячейки в другую
Здравствуйте. Подскажите можно ли как-то решить такую задачу. Есть столбец с данными вида:...


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

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