Ты за кого меня держиш!?
 Аватар для ЦарьКащей
22 / 23 / 7
Регистрация: 26.10.2011
Сообщений: 308
Записей в блоге: 1

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

27.09.2012, 20:04. Показов 2952. Ответов 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
Эксперт по электронике
6863 / 3286 / 340
Регистрация: 28.10.2011
Сообщений: 12,851
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru