powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как извлечь нужную информацию из графического файла?
2 сообщений из 2, страница 1 из 1
Как извлечь нужную информацию из графического файла?
    #37311883
TpaBka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите, кто знает!
Есть графический файл. Допустим его размер 10*10
В этом квадратике 50 пикселей закрашено черным цветом и 50 красным так вот как можно быстро извлечь данную информацию ну что там 50 пикселей RGB(0,0,0) и 50 пикселей RGB(255,0,0)
Я реализовал эту возможность через GetPixel
Загружаю картинку в Picture1 ну и дальше:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
For i =  0  To Picture1.ScaleHeight -  1 
    For j =  0  To Picture1.ScaleWidth -  1 
        ColorP = GetPixel(Picture1.hdc, j, i)
        C_RBG = getRGBLong(ColorP) ‘функция преобразование  к виду RBG
        Arr(k)= C_RBG
        k = k +  1 
    Next
Next 
Ну и там дальше идет код для работы с массивом

Все хорошо, но если загрузить фотку хотя бы 800*600 то процесс обработки может занять 10 мин что не есть хорошо!
Щас копаю в сторону API нашел функцию GetDIBits:

Код: plaintext
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.
Private Const BI_RGB =  0 &

Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap _
As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI _
As BITMAPINFO, ByVal wUsage As Long) As Long

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

Dim f As BITMAPINFO 'структура битмап_инфо хранит _
информацию о копируемом рисунке,  40  байтов
Dim Contain() As Byte 'массив для битов рисунка

Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
End Type
Private Type BITMAPINFO
        bmiHeader As BITMAPINFOHEADER
        bmiColors As RGBQUAD
End Type

Private Const DIB_RGB_COLORS =  0 

Function GBit ()
    With f.bmiHeader
        .biSize = LenB(f)
        .biWidth = ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)
        .biHeight = ScaleY(Picture1.Picture.Width, vbHimetric, vbPixels)
        .biPlanes =  1 
        .biBitCount =  32 
        .biCompression =  0 
        .biBitCount =  24 
        .biCompression = BI_RGB
    End With
     
    ReDim Contain( 1  To  3 ,  1  To f.bmiHeader.biWidth,  1  To f.bmiHeader.biHeight) As Byte


    GBit = GetDIBits(hdc, Picture1.Picture,  0 , f.bmiHeader.biHeight, Contain( 1 ,  1 ,  1 ), f,  0 )
     
    
End Function
Тут тупикнулся чо дальше делать не знаю.
Я хоть на правильном пути?
...
Рейтинг: 0 / 0
Как извлечь нужную информацию из графического файла?
    #37312445
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TpaBka,

на правильном. Продолжать можно в сторону vbaccelerator.com, класс cDIBSection, или CDrawingSurface , или clsPictureBox с lebans.com, или других подобных вещей.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как извлечь нужную информацию из графического файла?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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