Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/14: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1

Исправить ошибки в коде, сжимающем картинки

27.09.2012, 20:04. Показов 2919. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Код прилагаю:

PureBasic
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
Procedure N(*B, *C, WS, HS, WK, HK)
  For a = 0 To WS - WK - 1
    For b = 0 To HS - WS - 1 
      For c = 0 To WK - 1
        For d = 0 To HK - 1
          ZN = ZN + PeekL(*B + ((a * (HS - WS) + b) + (c * HK + d)) * 4)
        Next
      Next
      PokeL(*C + (a * (HS - WS) + b) * 4, ((ZN / (WK * HK) + PeekL(*C + (a * (HS - WS) + b) * 4)) / 2))
    Next
  Next
  ProcedureReturn(1)
EndProcedure
 
*B = AllocateMemory(40000)
*C = AllocateMemory(40000)
 
N(*B, *C, 100, 100, 20, 20)
 
For x = 0 To 100 - 1
  For y = 0 To 100 - 1
    PokeL(*B + (x * 100 + y) * 4, 444)  
  Next
Next
 
For x = 0 To 100 - 1
  For y = 0 To 100 - 1
    Debug PeekL(*C + (x * 100 + y) * 4)  
  Next
Next
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2012, 20:04
Ответы с готовыми решениями:

Исправить ошибки в приведенном коде
Здравствуйте! Приходилось ли вам использовать в логических конструкциях логические функции? Может вы мне поможете найти ошибку в ...

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h (inline) #pragma once class list...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить откуда. A.h #pragma once ...

6
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
27.09.2012, 22:07
Замысел не постиг, но сдается мне, что ты записываешь информацию в одну область памяти(*B), а читаешь из другой(*С).
0
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
27.09.2012, 23:29  [ТС]
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Замысел не постиг, но сдается мне, что ты записываешь информацию в одну область памяти(*B), а читаешь из другой(*С).
Метод сжатия картинки. В процедуру поступает по порядку: указатель на память с картинкой, указатель на память для результата, ширина и высота картинки, ширина и высота ячейки. Всё работает с длинными целыми числами типа лонг.
На словах не объясниш... В общем оно берёт куски размером в ширину ячейки умноженную высоту ячейки - её площадь, сжимает так сказать все значения в одно и записывает в результат. Сколько раз этот процесс повторится, столько и будет площадь результата.
Для наглядности - из картинки размером 3х3 пикселя получаем память в 9 лонгов и с шириной\высотой ячейки равной 2-м получим резальтат в виде картинки размером 2х2 пикселя а в памяти выглядеть будет как 4 лонга.

исходник результат
О О О ---> О О
О О О ---> О О
О О О --->

Добавлено через 2 минуты
но сдается мне, что ты записываешь информацию в одну область памяти(*B), а читаешь из другой(*С).
Так и должно быть. Я в *С результат записываю в процедуре.

Добавлено через 52 минуты
Чуть поправил. Процедура вызывалась не в том месте, но суть не поменялась, нули так и прут.
PureBasic
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
Procedure N(*B, *C, WS, HS, WK, HK)
  For a = 0 To WS - WK - 1
    For b = 0 To HS - WS - 1 
      For c = 0 To WK - 1
        For d = 0 To HK - 1
          ZN = ZN + PeekL(*B + ((a * (HS - WS) + b) + (c * HK + d)) * 4)
        Next
      Next
      PokeL(*C + (a * (HS - WS) + b) * 4, ((ZN / (WK * HK) + PeekL(*C + (a * (HS - WS) + b) * 4)) / 2))
    Next
  Next
  ProcedureReturn(1)
EndProcedure
 
*B = AllocateMemory(40000)
*C = AllocateMemory(40000)
 
 
 
For x = 0 To 100 - 1
  For y = 0 To 100 - 1
    PokeL(*B + (x * 100 + y) * 4, 444)  
  Next
Next
 
 N(*B, *C, 100, 100, 20, 20)
 
For x = 0 To 100 - 1
  For y = 0 To 100 - 1
    Debug PeekL(*C + (x * 100 + y) * 4)  
  Next
Next
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.09.2012, 07:47
Цитата Сообщение от ЦарьКащей Посмотреть сообщение
Так и должно быть. Я в *С результат записываю в процедуре.
Это тебе кажется.
В процедуре выполняется только один внешний цикл
For a = 0 To WS - WK - 1
А следующий выглядит так
For b = 0 To HS - WS - 1 или в значениях
For b = 0 To 100 - 100 - 1 - как думаешь, сколько раз он выполнится?

Открою один секрет - в PureBasic есть отладчик. Сейчас научу пользоваться :
К примеру, ставишь курсор на переменной ZN и нажимаешь F9 - будет выставлена контрольная точка на этой стоке.
Запускаешь программу, её выполнение остановится на строке с контрольной точкой. Далее в меню, где Отладчик выбираешь пункт "Просмотр переменных". Откроется окно, где реальные значения переменных в данный момент. Нажимая клавиши F8-F11 наблюдаем за работой программы, контролируя изменение переменных. Все ошибки как на ладони!
Используя этот инструмент можно САМОСТОЯТЕЛЬНО исправить все ошибки в коде. Проверено.
1
Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1
28.09.2012, 12:32  [ТС]
Исправил:

PureBasic
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
Procedure N(*B, *C, WI, HI, WP, HK)
  For a = 0 To WI - WP - 1
    For b = 0 To HI - HP - 1
      ZN = 0
      For c = 0 To WP - 1
        For d = 0 To HK - 1
          ZN = ZN + PeekL(*B + ((a * (HI - WI) + b) + (c * HK + d)) * 4)
        Next
      Next
      PokeL(*C + (a * (HI - WI) + b) * 4, ((ZN / (WP * HK) + PeekL(*C + (a * (HI - WI) + b) * 4)) / 2))
    Next
  Next
  ProcedureReturn(1)
EndProcedure
 
width = 200
height = 200
Kwidth = 20
Kheight = 20
*B = AllocateMemory(width * height * 4)
*C = AllocateMemory((width - Kwidth) * (height - Kheight) * 4)
 
 
 
For x = 0 To width - 1
  For y = 0 To height - 1
    PokeL(*B + (x * height + y) * 4, 444)  
  Next
Next
 
 N(*B, *C, width, height, Kwidth, Kheight)
 
For x = 0 To 179
  For y = 0 To 179
    Debug PeekL(*C + (x * (height - Kheight) + y) * 4)  
  Next
Next
Добавлено через 1 минуту
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Открою один секрет - в PureBasic есть отладчик.
Используя этот инструмент можно САМОСТОЯТЕЛЬНО исправить все ошибки в коде. Проверено.
Воистину!
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
28.09.2012, 13:19
Цитата Сообщение от ЦарьКащей Посмотреть сообщение
Исправил:
Точно? А откуда тогда взялась эта переменная HP?
Надо тебе ещё один секрет рассказать.
Что бы небыло ошибок, связанных с использованием не объявленных переменных ( ибо самые глупые и трудные ошибки) в начале кода надо написать волшебную фразу:
EnableExplicit
0
Эксперт по электронике
6572 / 3199 / 335
Регистрация: 28.10.2011
Сообщений: 12,478
Записей в блоге: 7
28.09.2012, 15:54
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Открою один секрет - в PureBasic есть отладчик.
https://www.cyberforum.ru/atta... 1316531307
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2012, 15:54
Помогаю со студенческими работами здесь

Ошибки при компиляции - исправить ошибки в коде
Помогите исправить ошибки , не понимаю в чем может быть причина ... #include <conio.h> #include <stdio.h> #include...

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include <iostream> using namespace std; class A{ private: int* a; size_t size_; ...

Исправить ошибки в коде
Dim Банк As Long Dim Партия As Long Dim НомерМаксимум As Long Dim НомерМинимум As Long Dim Максимум As Long Dim Минимум As Long ...

Исправить ошибки в коде
В чем тут ошибка не пойму, все как по книге написал!

Исправить ошибки в коде
Private Sub CommandButton4_Click() Dim m() As Integer Dim i As Integer For i = 1 To 8 On Error Resume Next m(i) =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru