Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65

Как скопировать изображение из одного DC в другое?

13.12.2016, 15:28. Показов 1338. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с проблемой. Создал два CompitableDC:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'Первый контекст
Public mDC As Long 
Public mBMP As Long, iBMP As Long 
Public iBG As StdPicture, hBG As Long
 
mDC = CreateCompatibleDC(Test.hdc)
mBMP = CreateCompatibleBitmap(Test.hdc, 3000, 3000)
iBMP = SelectObject(mDC, mBMP)
 
'Второй контекст
Set iBG = LoadPicture(App.Path + "\bg.jpg") 
hBG = CreateCompatibleDC(Test.hdc)
SelectObject hBG, iBG.Handle
'Копирую
BitBlt mDC, 0, 0, 2000, 2000, hBG, 0, 0, SRCCOPY
BitBlt Test.hdc, 0, 0, 1024, 768, mDC, 0, 0, SRCCOPY
Но код не работает!!! В чем проблема?!
Мне необходимо скопировать рисунок из одного контекста в другой.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2016, 15:28
Ответы с готовыми решениями:

Скопировать вложение из одного Rich поля в другое. как?
Задача такая в документах есть Rich поля "$file" в них хранятся файлы. Мне нужно взять файл из этого поля и скопировать в другой документ...

Как скопировать файл из одного места в другое с последующей заменой
Копирую файл таким образом IO.File.Copy("Path", "Path2") Если файл уже существует, то программа выдает ошибку Как копировать файл с...

Помогите скопировать 1 файл из одного места в другое
Ситуация такая есть ВБ проект который работает с базой аксес мдб. Мне нужно, чтобы после закрытия формы он копировал эту базу с машины на...

15
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
13.12.2016, 18:17
проверяй все этапы копирования через picturebox(тем же bitblt выводи в dc ), по очереди, увидишь где затык.

Добавлено через 22 минуты
Цитата Сообщение от Don Leno Посмотреть сообщение
Set iBG = LoadPicture(App.Path + "\bg.jpg")
hBG = CreateCompatibleDC(Test.hdc)
SelectObject hBG, iBG.Handle
по идее нужный тебе контекст можно получить так GetDc(IBG)
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
13.12.2016, 21:33
Весь код давай, вместе с декларациями, а лучше проект приложи. Непонятно что за Test.hdc.
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
13.12.2016, 21:47  [ТС]
В том то и дело что тестил. В hBG изображение есть, но в mDC оно не копируется! Не пойму почему?
Трик вот проект как ты просил, надеюсь поможешь.
Вложения
Тип файла: rar Parallax.rar (193.5 Кб, 9 просмотров)
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
13.12.2016, 21:57  [ТС]
Расскоментировав вот эти две строки в процедуре InitGraph
Visual Basic
1
2
    'bgBMP = CreateCompatibleBitmap(Test.hdc, 3000, 3000)
    'ibgBMP = SelectObject(bgDC, bgBMP)
в своем проекте и все стало работать!!!
Хм...странно вчера весь вечер бился, даже с этими строками ничего не работало(?!)..Что сейчас изменилось? Проект даже перезапускал...
Всем спасибо все работает
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
13.12.2016, 22:02
А зачем закомментил это:
Visual Basic
1
2
    'bgBMP = CreateCompatibleBitmap(Test.hdc, 3000, 3000)
    'ibgBMP = SelectObject(bgDC, bgBMP)
?
Ты рисуешь на рисунок выбранный в DC, если ты комментируешь эти строки то куду он будет рисовать в этой строке:
Visual Basic
1
BitBlt bgDC, 0, 0, 2000, 2000, hBG, 0, 0, SRCCOPY
?
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
13.12.2016, 22:24  [ТС]
Трик глюк вот в чем: сейчас подредактировал чтобы проверить как скопирует с другого слоя и снова черный экран и копирование не прошло. Закрыл проект запустил по новой и сразу все заработало?!! В чем проблема?!
Вот сам вставь в цикл эту строку заместо mDc и hBG
Visual Basic
1
    BitBlt dsDC, 500, 500, 15, 11, hDS, 0, 0, SRCCOPY
Добавлено через 7 минут
Мне кажется что то надо выгружать, удалять, очищать. Потому как глянул в диспетчер задач VB6.exe - 250 880 Кб!!! Что то здесь не так.

Добавлено через 5 минут

Не по теме:

Трик, кстати не в курсе почему форум вбстрит не открывается?! Пробовал в мозиле и яндекс браузере не грузит(((

0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
13.12.2016, 22:27
LoadGraph - идет создание контекстов и выбор пикчеров в них, но не вижу очистку и удаление.

Не по теме:

Цитата Сообщение от Don Leno Посмотреть сообщение
Трик, кстати не в курсе почему форум вбстрит не открывается?! Пробовал в мозиле и яндекс браузере не грузит(((
HDD у хостера накрылся.


----
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
13.12.2016, 22:42  [ТС]
Хм... и вправду...спасибо)))) Как же я так проглядел))) Пойду программить!! Если что в эту тему снова напишу)))

Добавлено через 5 минут
Не помогло!!! Глюк с копированием остался, а вот в диспетчере терь все в порядке)))

Добавлено через 2 минуты
перезапускал проект - бесполезно(((

Добавлено через 5 минут
Интересно что строки кода, которые заработали прежде

Visual Basic
1
2
BitBlt bgDC, 0, 0, 2000, 2000, hBG, 500, 500, SRCCOPY
BitBlt dsDC, 500, 500, 15, 11, hDS, 0, 0, SRCCOPY
Так и работают без сбоев, но как написал код для нового копирования не хочет и все!!!
Visual Basic
1
2
BitBlt bsDC, 500, 500, 19, 21, hBS, 0, 0, SRCCOPY
BitBlt Test.hdc, 0, 0, 1024, 768, bsDC, 0, 0, SRCCOPY
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
13.12.2016, 22:43
Скинь проект который не работает
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
13.12.2016, 22:47  [ТС]
Вот смотри
Вложения
Тип файла: rar Parallax.rar (193.5 Кб, 11 просмотров)
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
13.12.2016, 22:48  [ТС]
Там должна по середине экрана звездочка отрисоваться, но копирования не происходит(((
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
13.12.2016, 22:57
Цитата Сообщение от Don Leno Посмотреть сообщение
Там должна по середине экрана звездочка отрисоваться, но копирования не происходит(((
Рисует. Но ты так и не поправил очистку ресурсов:
Visual Basic
1
2
3
4
5
    SelectObject hBG, iBG.Handle
    SelectObject hDS, iDS.Handle
    SelectObject hBS, iBS.Handle
    SelectObject hPL, iPL.Handle
    SelectObject hSH, iSH.Handle
Ты должен делать что-то типа того:
Visual Basic
1
2
3
oIBG = SelectObject (hBG, iBG.Handle)
oIDS = SelectObject (hDS, iDS.Handle)
...
При удалении:
Visual Basic
1
2
3
4
SelectObject hBG, oIBG
DeleteDc hBg
SelectObject hDS, oIDS 
DeleteDc hDS
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
14.12.2016, 15:20  [ТС]
Сделал очистку как должно быть, но все равно не работает! Ладно завтра снова все просмотрю и отпишусь авось снова заработает))))

Добавлено через 16 часов 9 минут
tThe trick, пришел сегодня с работы, запустил проект и ничего не изменяя стартанул его - в итоге ничего не работало. Но bgDC и dsDc рисует как и вчера. Позже закрыл проект и запустил снова - первый раз все заработало, но после того как я стартанул его вновь (не внося изменений!) он перестал работать. То есть проект срабатывает лишь при первом запуске и то не всегда((( Вообще не пойму что происходит, помоги разобраться!

Добавлено через 5 минут
Поставил цвет формы с черного на стандартный серый, и после пробного перезапуска проекта:
Стартанул первый раз - все работает полет нормальный)))
Остановил и стартанул снова - ФОН формы не черный!!! (Значит не идет отрисовка на dc формы), а серый как я и поставил его стандартно.
Следовательно BitBlt не срабатывает во второй раз, вопросы: почему и как это исправить?!
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
14.12.2016, 16:11
Нужно проверять все возвращаемые значения и анализировать
0
0 / 0 / 0
Регистрация: 23.03.2015
Сообщений: 65
15.12.2016, 15:55  [ТС]
Лан, пойду код копать))) Главное выявили проблемы))) Спасибо трик за помощь)))

Добавлено через 1 час 19 минут
Нашел в чем причина)))
Не создается Компитабельный битмап для bsBMP и все последующие после него. Значения на 0!

Добавлено через 7 минут
При первом запуске создает контексты, битмапы и селектит для 4: mDC, bgDC, dsDC и bsDC. После повторного старта создает только для 3: mDC, bgDC, dsDC. У остальных контексты создаются, а битмапы нет!

Добавлено через 12 минут
Нашел!!!!
Проблема в размере создаваемого компитабельного (Compitable) битмапа. Суть в том, что я в проекте создаю 6 битмапов с размером 3000*3000 пикселей.
После поставил для 3 битмапов по 3000 размер, а для оставшихся 3-х по 1000. И все заработало - битмапы создаются и селектятся!!
В итоге: получается при создании компитабельных битмапов в сумме их размер не должен превышать какого-то числа! Но вопрос какого и как подсчитать размер для этих битмапов? Чтобы в реалтайм отслеживать размер и видеть будет ли превышен или нет...
Жду помощи по найденой ошибке))))

Добавлено через 21 час 31 минуту
Вопрос - как узнать размер bitmap в памяти?!

Добавлено через 4 минуты
Искал в нете, нашел такое уравнение:
Размер = Высота*Ширина*КоличествоБайтНаКаждыйПикс ель
Я знаю что есть такая структура:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
typedef struct tagBITMAPINFOHEADER {
      DWORD biSize;
      DWORD biWidth;
      DWORD biHeight;
      WORD biPlanes;
      WORD biBitCount;
      DWORD biCompression;
      DWORD biSizeImage;
      DWORD biXPelsPerMeter;
      DWORD biYPelsPerMeter;
      DWORD biClrUsed;
      DWORD biClrImportant;
  } BITMAPINFOHEADER;
чтобы посчитать необходимо:
size = bihHeight*biWidth*biBitCount ??
Как получить эту структуру BITMAPINFOHEADER для bitmap в памяти?!
biBitCount возвращает значение в битах, а для уравнения нужно в байтах.
То есть необходимо biBitCount/8??!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2016, 15:55
Помогаю со студенческими работами здесь

Работа в PowerShell (скопировать файл из одного места в другое)
Здравствуйте! Начали работать в PowerShell, преподаватель задал выполнить следующее: В зависимости от запроса в интерактивном режиме...

При нажатии на кнопку скопировать текст из одного текстового поля в другое
при нажатии на кнопку скопировать текст из одного текстового поля в другое. на странице html расположены два текстовых поля, и...

Скопировать изображение из одного PictureBox-а в другой
Добрый день, в одном пикчербоксе есть изображение. Надо скопировать его в другой пикчербокс. Пробовал варианты: PictureBox p =...

Подскажите, как сделать в html, чтобы изображение накладывалось на другое изображение?
Нужно, чтобы изображение накладывалось на другое изображение, а другое изображение растягивалось по заданной мною ширине. Спасибо, я...

Как поместить одно изображение на другое?
Я бы и вручную это сделал, но думаю, что в C# есть какие - нибудь средства, чтобы делать это проще. Вот ,например, нужно мне открыть...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru