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

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

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

Студворк — интернет-сервис помощи студентам
Подскажите, люди добрые, не оставте в печали, пожалуйста.
Имею наглое желание скопировать изображение размером 100х100 из Bitmap Background(600,600) в Bitmap Copia(100,100). Возможно ли использование Bitblt для этой цели, и если возможно, то каким образом? Не знаю как «прицепиться» к Background, поскольку GetHdc ссылку на память не даёт. Если Bitblt не работает, то какими средствами возможно осуществить желаемое?
Заранее признателен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.01.2010, 01:29
Ответы с готовыми решениями:

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

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

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

11
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.01.2010, 09:00
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  [ТС]
Извиняюсь за неточное объяснение, копирование квадрата хочу произвести в памяти, а не на экране
0
мну довольно <(-__-)l
 Аватар для gGrn-7DA
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.01.2010, 11:55
так и я не с экрана читаю...
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 12:04  [ТС]
Извините, спросонья не разобрался, у нас только 9 часов.

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

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

Добавлено через 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
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
28.01.2010, 13:51
Работайте с массивом, Set\GetPixel очень медленные
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 14
28.01.2010, 15:23  [ТС]
Цитата Сообщение от HIMen Посмотреть сообщение
Работайте с массивом, Set\GetPixel очень медленные
Не могли бы Вы привести хотя бы один малю-ю-юсенький примерчик, если это не сложно?
0
 Аватар для HIMen
4340 / 1509 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
28.01.2010, 15:29
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  [ТС]
Большое спасибо вам обоим за помощь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.01.2010, 18:45
Помогаю со студенческими работами здесь

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

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

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

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

Скопировать часть содержимого ячейки в другую
Здравствуйте. Подскажите можно ли как-то решить такую задачу. Есть столбец с данными вида: ('size' Merchant: '10.5 3E US' / Amazon:...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru