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

Вопрос прорисовки из оперативной памяти DIB

25.06.2011, 12:45. Показов 1375. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В результате работы некоторой функции, я получаю pDIB - указатель на 1й байт в оперативной памяти, где это все храниться.
Нашел небольшой модуль:
Visual Basic
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
Private Type BITMAPINFOHEADER '40 bytes
   biSize As Long
   biWidth As Long
   biHeight As Long
   biPlanes As Integer
   biBitCount As Integer
   biCompression As Long
   biSizeImage As Long
   biXPelsPerMeter As Long
   biYPelsPerMeter As Long
   biClrUsed As Long
   biClrImportant As Long
End Type
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef dest As Any, ByRef src As Any, ByVal dwLen As Long)
Private m_memBits() As Byte
Private m_memBitmapInfo() As Byte
Private m_bih As BITMAPINFOHEADER
Private m_bfh As BITMAPFILEHEADER
Public Function CreateFromPackedDIBPointer(ByRef pDIB As Long) As Boolean
Debug.Assert pDIB <> 0
'Creates a full-color (no palette) DIB from a pointer to a full-color memory DIB
 
'get the BitmapInfoHeader
Call CopyMemory(ByVal VarPtr(m_bih.biSize), ByVal pDIB, Len(m_bih))
If m_bih.biBitCount < 16 Then
    Debug.Print 'Error! DIB was less than 16 colors.'
    Exit Function 'only supports high-color or full-color dibs
End If
 
'now get the bitmap bits
If m_bih.biSizeImage < 1 Then Exit Function 'return False
ReDim m_memBits(0 To m_bih.biSizeImage - 1)
Call CopyMemory(m_memBits(0), ByVal pDIB + 40, m_bih.biSizeImage)
 
'and BitmapInfo variable-length UDT
ReDim m_memBitmapInfo(0 To 39) 'don't need first 14 bytes (fileinfo)
Call CopyMemory(m_memBitmapInfo(0), m_bih, Len(m_bih))
 
'create a file header
With m_bfh
    .bfType = BMP_MAGIC_COOKIE
    .bfSize = 55 + m_bih.biSizeImage 'size of file as written to disk
    .bfReserved1 = 0&
    .bfReserved2 = 0&
    .bfOffBits = 54 'BitmapInfoHeader + BitmapFileHeader
End With
 
'and return True
CreateFromPackedDIBPointer = True
 
End Function
 
В массиве m_memBits хранятся поочередно цвета, т.е. можно прорисовать следующим образом:
 ni = 0
 For yy = 0 To m_bih.biHeight - 1
   For xx = 0 To m_bih.biWidth - 1
   SetPixel frmStart.Picture1.hdc, xx, yy, RGB(m_memBits(ni + 2), m_memBits(ni + 1), m_memBits(ni))
  ni = ni + 3
  Next xx
 Next yy
Подскажите пожалуйста, как мне вывести этот рисунок на экран с помощью стандартных API - функций.

Заранее благодарен.
С уважением Артем.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.06.2011, 12:45
Ответы с готовыми решениями:

Вопрос по совместимости оперативной памяти.
Есть материнка: Jetway M25GT4 Series: nVIDIA nForce 570 SLI, AMD Hammer (4x DDRII 800, 4 PCI-E + 3 PCI, SATA Raid) Сейчас вдёрнуты 2...

Вопрос о двухсторонней и односторонней оперативной памяти
Ребят дайте небольшое описание двухсторонней и односторонней оперативной памяти, и приведите пару премеров!!! При сборе компа столкнулся с...

Вопрос по поводу частоты оперативной памяти.
Решил сделать апгрейд купил 3 планки по 2 гб (скрин 1) подскажите почему они работают на 333.3 МHz частоте (СКРИН 2) а не на 400? Они же...

1
Messir
25.06.2011, 20:22
Все решается гораздо проще
см. SetDIBitsToDevice
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.06.2011, 20:22
Помогаю со студенческими работами здесь

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

Игра в консоли - вопрос скорости прорисовки сцены
Мне надо создать небольшую игру в консоли на VB.NET (2010). Когда я пытаюсь сначала очищать консоль, потом выводить символы, а потом делать...

Использование оперативной памяти (вылетают игры из-за нехватки памяти)
Перезагружаю комп, играю часа 3-4 и вся память пропадает куда-то в результате чего игры вылетают(закрытие всех прог и игр оставляет где-то...

Установлено 2 планки оперативной памяти по 32Гб, 8 модулей по 8Гб, отображается только 32Гб памяти
Добрый день! Подскажите пожалуйста, почему система видит только 32 Гб памями, стоит 2 планки последовательно (при установке в другие слоты...

Режимы оперативной памяти
Добрый вечер, помогите разобраться какая все таки частота оперативной памяти у меня выставлена в данный момент, скриншоты скину,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru