Копирование Битмапов в памяти

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VictorVM
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 03.03.2006 (Пт) 6:37

Копирование Битмапов в памяти

Сообщение VictorVM » 26.03.2006 (Вс) 9:55

Нужно скопировать один битмап в другой.
По сути битмап - это набор байтов в памяти.
Код: Выделить всё

    hBMP1 = CreateCompatibleBitmap(hdcScreen, 100, 100)
    hBMP2 = CreateCompatibleBitmap(hdcScreen, 100, 100)
    CopyMemory hBMP1, hBMP2, nBytes


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

С уважением Виктор.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 26.03.2006 (Вс) 11:11

GetBitmapBits(hBMP1)
SetBitmapBits(hBMP2)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.03.2006 (Вс) 11:41

VictorVM
Раздел Для новичков - самое оно. В следующий раз будет замечание.

Private Declare Function CopyImage Lib "user32.dll" (ByVal handle As Long, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VictorVM
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 03.03.2006 (Пт) 6:37

Сообщение VictorVM » 28.03.2006 (Вт) 11:52

Парни, вы меня не поняли. Я прекрасно знаю эти функции:
Код: Выделить всё

    GetObject Picture1.Picture, Len(BM), BM
    dwCount = BM.bmWidthBytes * BM.bmHeight * BM.bmPlanes
    ReDim arr(1 To dwCount)
    GetBitmapBits Picture1.Picture, dwCount, arr(1)
    SetBitmapBits Picture2.Picture, dwCount, arr(1)
    Picture2.Refresh

Вопроc в другом. У меня не получается сделать то-же самое, что показано вверху, при помощи CopyMemory. Ну типи заменить

Код: Выделить всё

    GetBitmapBits Picture1.Picture, dwCount, arr(1)
    SetBitmapBits Picture2.Picture, dwCount, arr(1)


на

Код: Выделить всё

CopyMemory Picture2.Picture, Picture1.Picture, dwCount


или это невозможно?

С уважением Виктор

Velin
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 26.09.2004 (Вс) 19:07

Сообщение Velin » 28.03.2006 (Вт) 11:56

Дэк, hBitmap - это ведь не адрес чего-то... Это, как я понимаю просто индекс элемента в некоторой системной таблице. Или не так?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.03.2006 (Вт) 12:08

Velin прав.
Изображение

VictorVM
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 03.03.2006 (Пт) 6:37

Сообщение VictorVM » 28.03.2006 (Вт) 12:52

Если это не адрес, то почему GetObject работает в приведённом выше примере? Я полагал, что Picture1.Picture - возвращает хендл битмапа. Похоже ошибался.

Ладно спасибо.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.03.2006 (Вт) 16:16

хендл != адрес
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList  
cron