Перевести картинку в 16 цветов!

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

Перевести картинку в 16 цветов!

Сообщение kozak » 24.05.2004 (Пн) 23:22

Прошу извининения за несовсем поянтную тему...
Мне нужно как-то сделать что бы можно было перевести обычную картинку в паскаль, т.е. по-пиксольно считать все пиксели а потом сделать это кодом паскаля... у меня такая проблема что паскаль поддерживает только 16 цветов и я не могу различить где какой...
Я думаю суть понятная... вот код что бы получить цвет пикселя в картинке:

Код: Выделить всё
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long

Private Sub Form_Load()
    Me.AutoRedraw = True
    msgbox = GetPixel(Picture1.hdc, XX, YY)
End Sub

Faust
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 649
Зарегистрирован: 29.12.2003 (Пн) 13:38
Откуда: лаборатория

Сообщение Faust » 29.05.2004 (Сб) 20:30

А адрес электронной почты у тебя есть? Если да, то укажи в профиле или напиши что-нибудь мне, если не хочешь его разглашать. Я писал нечто подобное в свое время.
Листинги не горят!

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 31.05.2004 (Пн) 3:02

Можно по соотношению и каким-то заданным рамкам цветовых составляющих. Но я не очень уверен в том что это сильно хорошо будет. Да и ещё когда я писал такую прогу на QB то он загибался от обилия точек. Думаю такая же фигня будет и с паскалем. Не привык он к миллионам точек (я думаю) Да и качество картинки после перевода тебя "поразит" :wink:

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

Сообщение Mikle » 31.05.2004 (Пн) 10:17

Я тоже писал такое на QB, а чтобы качество не "поражало", сделал рэндомную зависимость полученного цвета от исходного. Выбирал четыре ближайших цвета, какой ближе, у того выше вероятность. Получается что-то вроде заставки из установки Win95 - такая синяя клавиатура, вся в мелких точках.
...Не могу найти.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 31.05.2004 (Пн) 10:25

На QB можно сделать 1024х768 32bit без проблем...

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 31.05.2004 (Пн) 12:56

Z-zzz писал(а):На QB можно сделать 1024х768 32bit без проблем...

Как? Если не секрет? Всегда хотел узнать можно ли и как?

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 31.05.2004 (Пн) 13:51

На QB 4.5:
Код: Выделить всё
DECLARE SUB Pixel (x%, y%, Col%)
   DECLARE SUB ScreenMode (SM%)

   ' $INCLUDE: 'qb.bi'                            'Required to use
   DIM SHARED InReg AS RegType, OutReg AS RegType 'CALL INTERRUPT

   DEFINT A-Z                   'Defines all variables as Integers

   ScreenMode &H101             'Call sub ScreenMode
   FOR a = 1 TO 640             'Begins "a" FOR-NEXT Loop
    Col = Col + 1               'Increases variable Col
    IF Col = 256 THEN Col = 1   'If Col is bigger than 256,
                                'then set it to 1
    FOR b = 1 TO 480            'Begins "b" FOR-NEXT Loop
     Pixel a, b, Col            'Call sub Pixel
    NEXT                        'Ends "b" FOR-NEXT Loop
   NEXT                         'Ends "a" FOR-NEXT Loop

   SLEEP 1                      'Waits for 1 second or user input
   ScreenMode 3                 'Return to text mode

   END                          'La fin!

   SUB Pixel (x, y, Col)

    InReg.Ax = &HC00 + Col             'Sticks your color into AX
    InReg.Cx = x                       'Sticks x value in CX
    InReg.Dx = y                       'Sticks y value in DX
    CALL INTERRUPT(&H10, InReg, OutReg)'Calls Int 10h, which places
                                       'a pixel at (x, y) with an
                                       'attribute of Col
   END SUB

   SUB ScreenMode (SM)

    'SM (ScreenMode) may be any one of the following:
    '3 = Text Mode
    '&H100 = 640x400x256
    '&H101 = 640x480x256
    '&H102 = 800x600x16
    '&H103 = 800x600x256
    '&H104 = 1024x768x16
    '&H105 = 1024x768x256

    InReg.Ax = &H4F02                      'Sticks 4F02h in AX
    InReg.Bx = SM                          'Sticks ScreenMode in BX
    CALL INTERRUPT(&H10, InReg, OutReg)    'Using InRegisters,
                                           'calls Int 10h and
                                           'sticks output (none in
                                           'this case) into
                                           'OutRegisters
   END SUB


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 10

    TopList