Класс Sprite. Избавиться от Hdc

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Класс Sprite. Избавиться от Hdc

Сообщение Don Leno » 18.02.2019 (Пн) 19:19

Создал простенький класс для спрайтов. Получаю из loadPicture изображение и через GetDIBits беру в массив Spr(). Суть в том чтобы для загрузки изображения из файла (Саба LoadFromFile) необходим параметр frmMain.hdc, то есть GetDIBits просит передать в нее какое нить Dc! Вопрос как избавиться мне от этого параметра?

Вот на реальном примере:
Код: Выделить всё
Dim MySpr As New Sprite

MySpr.LoadFromFile frmMain.Hdc, App.Path + "\1.jpg", 1024, 768


Хотелось бы чтобы было так:
Код: Выделить всё
Dim MySpr As New Sprite

MySpr.LoadFromFile App.Path + "\1.jpg", 1024, 768


И еще как узнать ширину и высоту изображения полученого через LoadPicture, чтобы сделать опциональными последние два параметра?

Ниже положил исходник. Внимание! В нем нет комментариев!
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Класс Sprite. Избавиться от Hdc

Сообщение Mikle » 18.02.2019 (Пн) 19:45

Don Leno писал(а):Вопрос как избавиться мне от этого параметра?

Зачем?
Если пишешь программу без форм, можно брать hDC рабочего стола.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Класс Sprite. Избавиться от Hdc

Сообщение Don Leno » 18.02.2019 (Пн) 20:22

Просто постоянно вводить этот параметр для десятков спрайтов запаришься! Вот я и спросил. То есть придется брать через CreateDC с параметром Display? А можно как то классу изначально передать параметр hdc и использовать его в классе как понадобиться? Также ссори за офтоп, если указать параметр Optional то если его пользователь не указал, то какое значение он будет иметь? Будет =0?

Код: Выделить всё
Optional Width as long, Optional Height as Long


В итоге нашел в просторах паутины код который получает размеры изображения из IPictureDisp, но смело можно заменить на StdPicture и пользоваться:
Код: Выделить всё
Private Declare Function MulDiv Lib "kernel32" ( _
    ByVal Mul As Long, _
    ByVal Nom As Long, _
    ByVal Den As Long) As Long

'//Returns Image Width/Height In Pixel
Public Function GetImageProperties(ByVal sPath As String, ByRef retWidth, ByRef retHeight)
  Dim pic As IPictureDisp

  On Error GoTo errHandler
  Set pic = LoadPicture(sPath)

  retWidth = HM2Pix(pic.Width)
  retHeight = HM2Pix(pic.Height)
  'MsgBox "H=" & nHeight & " W=" & nWidth

  Set pic = Nothing
  Exit Function
errHandler:
  Err.Raise Err.Number, Err.Source, Err.Description
End Function

' HM2Pix
'
' Converts HIMETRIC to Pixel
'
Private Function HM2Pix(ByVal Value As Long) As Long
  HM2Pix = MulDiv(Value, 1440, 2540) / Screen.TwipsPerPixelX
End Function

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Класс Sprite. Избавиться от Hdc

Сообщение Mikle » 18.02.2019 (Пн) 21:21

Don Leno писал(а):придется брать через CreateDC с параметром Display?

Нет, достаточно GetDC(0), это и будет hDC рабочего стола.
Don Leno писал(а):если указать параметр Optional то если его пользователь не указал, то какое значение он будет иметь? Будет =0?

Если это число (а не строка, например) - то 0, но ты можешь сам задавать значение по умолчанию:
Код: Выделить всё
Private Sub SpriteCreateText(Spr As SR2D_Sprite, Text As String, Optional ByVal ColorKey As Long = -1&)

Тут ColorKey, если его не задать, будет = -1.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Класс Sprite. Избавиться от Hdc

Сообщение Don Leno » 19.02.2019 (Вт) 18:59

Спс за помощь!


Вернуться в Мультимедиа

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

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

    TopList