powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
25 сообщений из 32, страница 1 из 2
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914212
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда-то написал конвертер в SFF-формат (Modified Huffman):
Конвертер TIFF(BMP...)->SFF самому написать реально? ...

Сильно врубаться еще раз в это кодирование желания нет, но перегнать на .Net надо.
И вот торможу слегка:

Берется DIB-bitmap:
Код: vbnet
1.
    hbmDst = CreateDIBSection(IntPtr.Zero, bmiDst, DIB_RGB_COLORS, pBits, IntPtr.Zero, 0)


На него проецируется картинка, не суть вопроса.
Суть в параметре pBits.

ppvBits (out)A pointer to a variable that receives a pointer to the location of the DIB bit values.
Т.е. ppvBits -грубо двумерный массив байтов Dim bDib() As Byte размером ScanLine_lenth * Height

Т.е. в VB6 поступал так:

Код: vbnet
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.
Private Type SAFEARRAYBOUND
  cElements As Long
  lLbound As Long
End Type

Private Type SAFEARRAY2D
  cDims As Integer
  fFeatures As Integer
  cbElements As Long
  cLocks As Long
  pvData As Long
  Bounds(0 To 1) As SAFEARRAYBOUND
End Type

Private Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" (Ptr() As Any) As Long

Public Function SFF_writePage(FileHandle As Integer, start As Long, _
 Width As Long, Height As Long, pBits As Long) As Long
...
  Dim ScanLine_lenth As Long
...
  Dim tSA As SAFEARRAY2D
  Dim bDib() As Byte
...

  ScanLine_lenth = ((Width + 15) \ 16) * 2
  ' Get the bits in the from DIB section:
  With tSA
    .cbElements = 1
    .cDims = 2
    .Bounds(0).lLbound = 0
    .Bounds(0).cElements = Height
    .Bounds(1).lLbound = 0
    .Bounds(1).cElements = ScanLine_lenth ' BytesPerScanLine()
    .pvData = pBits
  End With
  CopyMemory ByVal VarPtrArray(bDib()), VarPtr(tSA), 4

  'Modified Huffman
  For y = Height - 1 To 0 Step -1
    For x = 0 To ScanLine_lenth - 1
      For j = 0 To 7
        If ((x * 8 + j + 1) <= Width) Then ' интересует первые 1728 бит
          If ExamineBit(bDib(x, y), 7 - j) Then 'white bit
...


Фишка в том, что у меня в итоге есть двумерная матрица bDib()
и я могу обратиться к любому байту bDib(x, y) этой матрицы.


И вот я пытаюсь это перегнать на .Net...


Код: vbnet
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.
 <StructLayout(LayoutKind.Sequential)>
  Private Structure SAFEARRAYBOUND
    Dim cElements As Integer
    Dim lLbound As Integer
  End Structure

  <StructLayout(LayoutKind.Sequential)>
  Private Structure SAFEARRAY2D
    Dim cDims As Short
    Dim fFeatures As Short
    Dim cbElements As Integer
    Dim cLocks As Integer
    Dim pvData As IntPtr
    Dim Bounds0 As SAFEARRAYBOUND 'Bounds(0 To 1) As SAFEARRAYBOUND
    Dim Bounds1 As SAFEARRAYBOUND
  End Structure

  Public Function SFF_writePage(ByVal FileHandle As Integer, ByVal start As Integer, _
   ByVal Width As Integer, ByVal Height As Integer, ByVal pBits As IntPtr) As Integer
    Dim the_start As Integer
    Dim ScanLine_lenth As Integer
    Dim runlen As Integer
    Dim whiteLines As Integer
    Dim codeline As String 'Scan Line coded using MH
    Dim state As BITSTATE
    Dim tSA As SAFEARRAY2D
    Dim bDib() As Byte '???????
    Dim x As Integer, y As Integer
    Dim j As Integer
    Dim data() As Byte          ' the buffer
    Dim data_lenth As Integer

    data_lenth = 0
    the_start = start
    ScanLine_lenth = ((Width + 15) \ 16) * 2
    ' Get the bits in the from DIB section:
    With tSA
      .cbElements = 1
      .cDims = 2
      .Bounds0.lLbound = 0
      .Bounds0.cElements = Height
      .Bounds1.lLbound = 0
      .Bounds1.cElements = ScanLine_lenth ' BytesPerScanLine()
      .pvData = pBits
    End With
  CopyMemory ByVal VarPtrArray(bDib()), VarPtr(tSA), 4  ?????????

    'Modified Huffman
    whiteLines = 0
    For y = Height - 1 To 0 Step -1
      runlen = 0
      state = BITSTATE.STATE_WHITE
      codeline = ""
      For x = 0 To ScanLine_lenth - 1
        For j = 0 To 7
          If ((x * 8 + j + 1) <= Width) Then ' интересует первые 1728 бит
            If ExamineBit(bDib(x, y), 7 - j) Then 'white bit



И понимаю что все не просто.
1) У меня нет CopyMemory. Я ее естественно не собираюсь использовать. Есть Marshal, но я пока абсолютно не понимаю как его применять и какой его метод пользовать.
2) У меня нет Function VarPtrArray Lib "msvbvm60.dll", применять ее в .Net однозначно не имею права, это даже не чистый Win32.
3) У меня компилятор авансом ругается на bDib(x, y), типа не указана мерность/размерности массива Dim bDib() As Byte . VB6 его как-то масштабирует через VarPtrArray/SAFEARRAY2D/CopyMemory хз как.

Ну т.е. мне как-то надо получить матрицу bDib(x, y) as Byte из pBits (A pointer to a variable that receives a pointer...) Width и height мне известны.
(при этом не должно быть просадки по скорости из-за например дурацкого алгоритма заполнения массива байтов, кодирование в принципе штука не быстрая)

Есть идеи?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914226
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
трактуйте как одномерный массив
pBits - unsafe указатель
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914232
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилтрактуйте как одномерный массив
Тогда придется в алгоритм врубаться опять, а этого делать неохота, все кроме собственно получения матрицы фактически даже не требует правки кода.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914239
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

трудно смещение рассчитать типа i*stride+j ?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914248
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

врубаться надо.
а в двумерный никак?
Хотя я честно и на VB6 плохо понимаю как он так лихо пакует именно в двумерный. Это при том, что ни мерность, ни размерность bDib() я нигде заранее не указываю.
Ну по идее рассчитать то ее можно:
ScanLine_lenth =width/8=1728/8=216 по x (0 To 215), ну и (0 To Height-1) по y, то что я пишу в SAFEARRAYBOUND(0 to 1)
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914253
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77врубаться надо.
да, в простейшую адресную арифметику
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914271
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,



Попытался сначала объявить так (как двумерный):
Dim bDib(ScanLine_lenth, Height) As Byte
Но не хочет Marshal в двумерный копировать, нет видимо такой ф-ции

Ну допустим. Хорошо, пусть будет одномерный.
В конце концов
bDib(x , y) можно заменить на что-то типа bDib(x + y * ScanLine_lenth), и наверно этого достаточно

Попытался так
Код: vbnet
1.
2.
    Dim bDib(ScanLine_lenth * Height) As Byte
    Marshal.Copy(pBits, bDib, 0, ScanLine_lenth * Height)

Err.:Дополнительные сведения: Значение не может быть неопределенным.

Рискнул так (там же вроде указатель на указатель):
Код: vbnet
1.
2.
3.
4.
    Dim bDib(ScanLine_lenth * Height) As Byte
    Dim ptr(1) As IntPtr
    Marshal.Copy(pBits, ptr, 0, 1)
    Marshal.Copy(ptr(0), bDib, 0, ScanLine_lenth * Height)


Та же ошибка.

С арифметикой ладно. Получу картинку вверх ногами, буду думать где ошибся.
Одномерный то хоть как получить?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914298
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

похоже получилось вот так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    Dim bDib(ScanLine_lenth * Height) As Byte
    Marshal.Copy(pBits, bDib, 0, ScanLine_lenth * Height)

    'Modified Huffman
    whiteLines = 0
    For y = Height - 1 To 0 Step -1
      runlen = 0
      state = BITSTATE.STATE_WHITE
      codeline = ""
      For x = 0 To ScanLine_lenth - 1
        For j = 0 To 7
          If ((x * 8 + j + 1) <= Width) Then ' интересует первые 1728 бит
            If ExamineBit(bDib(x + y * ScanLine_lenth), 7 - j) Then 'white bit



А сразу не вышло, потому что у меня в CreateDIBSection случайно затесалась "невинная" ошибка:
Код: vbnet
1.
2.
3.
4.
  Public Declare Function CreateDIBSection Lib "gdi32" ( _
   ByVal hdc As IntPtr, <MarshalAs(UnmanagedType.Struct)> ByRef pBitmapInfo As BITMAPINFO2, _
   ByVal iUsage As Integer, ByRef ppvBits As IntPtr, _
   ByVal hSection As IntPtr, ByVal dwOffset As Integer) As IntPtr


Было объявлено ByVal, обычно ни на что не влияет, пока не начнешь доставать бит-матрицу рисунка.

Ну, т.е. картинку получил, в SFF-вьюере она открылась, вроде не косая, хотя напрячься думаю надо на предмет не съел ли я одну-две скан-линии случайно.

===================

Вопрос:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
  Private Function generateByte(byteAsStr As String) As Integer
    generateByte = 0
    If Strings.Len(byteAsStr) = 8 Then
      For i As Integer = 1 To 8
        generateByte = generateByte + CInt(Mid(byteAsStr, i, 1)) * (2 ^ (i - 1))
      Next i
    End If
  End Function

  ' The ExamineBit function will return True or False depending on
  ' the value of the nth bit (Bit%) of an integer (Byte%).
  Private Function ExamineBit(ByVal x As Byte, ByVal Bit As Byte) As Boolean
    Select Case x
      Case 255
        ExamineBit = True
      Case 0
        ExamineBit = False
      Case Else
        ' Return the truth state of the 2 to the nth power bit:
        ExamineBit = ((x And 2 ^ Bit) > 0)
    End Select
  End Function



В .Net оптимизировать как-то можно?
В VB6 помнится долго спорили кажется об них, ExamineBit вызывается 8 раз для каждого байта матрицы, хотя я и упростил до невозможности добавив частные случаи.
Т.е. несмотря на все оптимизации, GS делает аналогичную задачу быстрее (3 секунды против 33 для 52-страничного файла).
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914300
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
( 3 секунды против 33 для 52-страничного файла).

33 секунды -это VB6, чего вышло в .Net я еще не глядел.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914314
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одинаковый результат по скорости для VB6 и .Net, главное не хуже.
Нечего там похоже оптимизировать, сойдет.
Если только VB-шные FreeFile/FileOpen/FilePut/FileClose на .Net-овские аналоги поменять как они советуют, но я думаю это копейки.

Бенедикт,
спасибо за идею с одномерным массивом.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914326
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ^ n вместо сдвига -это ж надо такое придумать
"Оптимизация" с проверкой на 0 и 255 - задушил бы :)

А копирование зачем - unsafe pointer позволит без этого обойтись


И еще много над чем поработать есть
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914327
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

извини, назвал тебя Бенедиктом случайно.

Изопропил2 ^ n вместо сдвига -это ж надо такое придумать
В VB6 не было сдвига. Как? Приведи код.

ИзопропилОптимизация" с проверкой на 0 и 255 - задушил бы :)
Не торопись душить. Ты же не знаешь предмет.
12735582
авторХотя...большая часть изображения (незакодированного) -белый лист (или повторяется черное)... Стало быть GetBitX(255,a) и GetBitX(0,b) можно и не вычислять по 8 раз, результат и без вычислений ясен.

ИзопропилА копирование зачем - unsafe pointer позволит без этого обойтись.
Как? Приведи код.

ИзопропилИ еще много над чем поработать есть
Конечно. Еще y * ScanLine_lenth можно по 1728 раз не вычислять, но я попробовал убрать и скорости это не прибавило.

Самое смешное будет тогда когда поработав дней этак несколько экономия будет 0,5сек из 20-ти.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914328
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Строки откуда взялись?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914329
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть оригинальный код не на Бейсике?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914331
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

12737548

Весь алгоритм под вторым спойлером.
Ф-ция кодировки страницы это SFF_writePage
Хотя я уже плоховато помню, там черт ногу сломит.
Смысл, пишутся подряд в строку нулики-единички, как г-н Huffman придумал, потом это все пакуется в байты.
Код так или иначе безошибочный, я над ним тогда долго работал.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914333
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилЕсть оригинальный код не на Бейсике?
Мой и есть оригинальный, хотя я конечно подсматривал в GS, но весьма поверхностно.

Описание алгоритма и все что по теме:
12700450 и т.д.

Но поверь, мне второй раз во всем этом копаться не хочется.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914334
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код может и безошибочный, но страшноватый

Замечания разумные уже тогда были сделаны

Резервы для оптимизации очень большие, но нужно вернуться чуток назад, дабы извести следы борьбы с инструментом(Бейсиком)
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38914355
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Не торопись душить. Ты же не знаешь предмет.
12735582

зато говнокод вижу
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915210
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил,

ну допустим немного поработать можно для общего развития.

Хорошо, я два конкретных вопроса выше 17422444 задавал:

1.
Код: vbnet
1.
2.
Dim bDib(ScanLine_lenth * Height) As Byte
Marshal.Copy(pBits, bDib, 0, ScanLine_lenth * Height)


Ну да, я копирую массив целиком.
А вот в VB6 я похоже массив не копирую.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  Dim tSA As SAFEARRAY2D
  Dim bDib() As Byte
...

  ScanLine_lenth = ((Width + 15) \ 16) * 2
  ' Get the bits in the from DIB section:
  With tSA
    .cbElements = 1
    .cDims = 2
    .Bounds(0).lLbound = 0
    .Bounds(0).cElements = Height
    .Bounds(1).lLbound = 0
    .Bounds(1).cElements = ScanLine_lenth ' BytesPerScanLine()
    .pvData = pBits
  End With
  CopyMemory ByVal VarPtrArray(bDib()), VarPtr(tSA), 4

           ...bDib(x, y)



И свистопляски с SAFEARRAY2D сдается мне и делаются за ради не копировать массив. Да еще и сразу как с двумерным работаем.

>pBits - unsafe указатель
Ну и как тогда в .Net сказать чтоб bDib() сразу использовал pBits?
(по сути это ключевой вопрос этого топика, видимо не дорешенный)

P.S. Хотя я не думаю, что разовое копирование всего bit-массива занимает вагон времени (тесты дают одинаковую скорость в .Net и VB6)

2.
Код: vbnet
1.
2.
      ' Return the truth state of the 2 to the nth power bit:
        ExamineBit = ((x And 2 ^ Bit) > 0)



Ну и как это через "битовый сдвиг" переписать?


Ну, основные "тормоза" в алгоритме конечно из-за строк. Но в силу алгоритма там без строк похоже не обойтись. Там же весь смысл, чтоб эти от балды взятые 1-ки и 0-ки в строчку выписать, а потом с ними колдовать.
Т.е. ну да, для существенного ускорения только C++, где другие методы работы со строками.

А вот эти все "оптимизации" это спички, и все что по существу я мог выжать, я выжал тогда.
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915246
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но в силу алгоритма там без строк похоже не обойтись.
почему бы сразу из битовых строк результат не клеить?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915268
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Ну и как тогда в .Net сказать чтоб bDib() сразу использовал pBits?
ну как-то так
Код: c#
1.
2.
3.
4.
5.
6.
7.
unsafe{
      byte* p = (byte*)pBits;
      for (int i = 0; i < len; i++)
      {
            Console.WriteLine("{0}", p[i]);
      }
}


как это на бейсике - вам виднее
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915300
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилну как-то так
Код: c#
1.
      byte* p = (byte*)pBits;


как это на бейсике - вам виднее
А вот не виднее. хз как на VB это сделать.
В VB6 всегда используется CopyMemory (MoveRtlMemory родное название кажется).
В .Net то же самое это Marshal.
В приведенном VB6 примере с SAFEARRAY2D используется хитрость, за счет чего массив не копируется, хотя до конца все же не уверен, но по-любому в .Net у меня нет VarPtr, StrPtr, VarPtrArray, кот. по сути нужны для "разворачивания объекта из указателя".

>почему бы сразу из битовых строк результат не клеить?
Это как? Там же количество бит неровное? И иначе как строками это не запишешь.
И потом там не тупая склейка, а анализ и упаковка того что склеили.
Что вкладываешь в слово "битовая строка"?
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915311
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

http://converter.telerik.com/

Код: vbnet
1.
2.
3.
4.
Dim p As Pointer(Of Byte) = CType(pBits, Pointer(Of Byte))
For i As Integer = 0 To len - 1
	Console.WriteLine("{0}", p(i))
Next
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915314
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes,

сразу скажу, не уверен, что сработает. уже очень давно я забил на VB.NET
...
Рейтинг: 0 / 0
GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
    #38915320
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Что вкладываешь в слово "битовая строка"?
битики упакованные в байты
Дмитрий77Там же количество бит неровное? И иначе как строками это не запишешь
так же как и на C.
в модифицированном хаффмане что для факса - максимум 12 бит используется,
в обычное короткое слово влезет. а дальше - сдвигать,складывать, записывать
...
Рейтинг: 0 / 0
25 сообщений из 32, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / GDI-Bitmap, работа с DIB bit двумерным массивом, SAFEARRAY2D и VarPtrArray в .Net как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]