0 / 0 / 0
Регистрация: 21.03.2019
Сообщений: 21

Запись номеров закрашенных пикселей в массив

05.05.2022, 20:16. Показов 872. Ответов 8

Студворк — интернет-сервис помощи студентам
Всем привет! Мне необходимо написать код для записи номеров закрашенных пикселей картинки в массив. Пиксели нумеруются по принципу, указанному на картинке (картинка просто для иллюстрации принципа нумерации, в реальности же будет использоваться изображение с фигурой на белом фоне). Буду очень благодарен за помощь.
Миниатюры
Запись номеров закрашенных пикселей в массив  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2022, 20:16
Ответы с готовыми решениями:

Вывести на форму рисунок, состоящий из различных объектов, не закрашенных и закрашенных полностью
напишите пожалуйста код и результат Изучите справки MSDN1 методы и свойства классов Graphics, Color, Pen и SolidBrush. Создайте...

Запись в массив Б номеров положительных элементов массива А
Помогите составить программу записи в массив Б номеров положительных элементов массива А. Всем добра. ;)

Вывести массив номеров строк и массив номеров столбцов, все элементы которых равны только 1 или только 0
Задан размер квадратной матрицы и значения ее элементов (0 или 1). Сформировать и вывести массив номеров строк и массив номеров столбцов,...

8
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,657
06.05.2022, 16:27
Python
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
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QVBoxLayout, QLabel
 
class Window(QWidget):
  def __init__(self):
    super().__init__(None)
    self.grid = QGridLayout()
    self.grid.setSpacing(0)
    value = 0
    for column in range(16):
      for row in range(9,-1,-1):
        button = QPushButton()
        button.setStyleSheet("background-color: white")
        button.value = value
        button.state = False
        value = value + 1
        button.setFixedHeight(50)
        button.setFixedWidth(50)
        button.clicked.connect(self.click)
        self.grid.addWidget(button, row, column)
    self.label = QLabel("нажимайте кнопки для создания рисунка")
    self.label.setWordWrap(True)
    l = QVBoxLayout()
    l.addLayout(self.grid)
    l.addWidget(self.label)
    self.setLayout(l)
  def click(self):
    button = self.sender()
    button.state = not button.state
    if button.state:
      button.setStyleSheet("background-color: blue")
    else:
      button.setStyleSheet("background-color: white")
    result = []
    for column in range(16):
      for row in range(9,-1,-1):
        button = self.grid.itemAtPosition(row, column).widget()
        if button.state:
          result.append(button.value)
    self.label.setText("массив закрашенных клеток: " + str(result))
 
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
1
0 / 0 / 0
Регистрация: 21.03.2019
Сообщений: 21
06.05.2022, 18:22  [ТС]
Спасибо большое! Это даже лучше, чем я мог себе представить. А могу ли я сохранить массив с номерами ячеек для дальнейшего использования в основной программе? То есть сделать возможность выхода из окна с рисунком, сохранения массива result и дальнейшего выполнения кода с использованием этого массива.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,657
06.05.2022, 18:39
Цитата Сообщение от Alex131311 Посмотреть сообщение
А могу ли я сохранить массив с номерами ячеек для дальнейшего использования в основной программе? То есть сделать возможность выхода из окна с рисунком, сохранения массива result и дальнейшего выполнения кода с использованием этого массива.
Ну, а почему нет- в любой момент времени объект Window может сформировать массив наподобие, как формируется result в методе click (можно даже для этого отдельный метод дописать). Ну и если массив можно сформировать, значит его и передать можно куда угодно. А закрытие виджета можно осуществлять с помощью вызова Window.close.
0
0 / 0 / 0
Регистрация: 21.03.2019
Сообщений: 21
06.05.2022, 19:12  [ТС]
То есть нужно обязательно создавать новый массив, аналогичный result? Или всё таки сам result можно использовать дальше в программе? В данный момент у меня не получается это сделать. Как только я заканчиваю отмечать нужные ячейки и закрываю окно, программа выполняется дальше, но массив result не определен.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,657
07.05.2022, 13:19
Цитата Сообщение от Alex131311 Посмотреть сообщение
Как только я заканчиваю отмечать нужные ячейки и закрываю окно, программа выполняется дальше, но массив result не определен.
Мы же не знаем как вы его передаёте
Пример:
Python
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
58
59
60
61
62
63
64
65
66
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QVBoxLayout, QLabel, QDialog
 
class Editor(QDialog):
  def __init__(self, parent):
    super().__init__(parent)
    self.grid = QGridLayout()
    self.grid.setSpacing(0)
    value = 0
    for column in range(16):
      for row in range(9,-1,-1):
        button = QPushButton()
        button.setStyleSheet("background-color: white")
        button.value = value
        button.state = False
        value = value + 1
        button.setFixedHeight(50)
        button.setFixedWidth(50)
        button.clicked.connect(self.click)
        self.grid.addWidget(button, row, column)
    self.label = QLabel("нажимайте кнопки для создания рисунка")
    self.label.setWordWrap(True)
    closeButton = QPushButton("закрыть редактор и передать массив")
    closeButton.clicked.connect(self.accept)
    l = QVBoxLayout()
    l.addLayout(self.grid)
    l.addWidget(self.label)
    l.addWidget(closeButton)
    self.setLayout(l)
  def getResult(self):
    result = []
    for column in range(16):
      for row in range(9,-1,-1):
        button = self.grid.itemAtPosition(row, column).widget()
        if button.state:
          result.append(button.value)
    return result
  def click(self):
    button = self.sender()
    button.state = not button.state
    if button.state:
      button.setStyleSheet("background-color: blue")
    else:
      button.setStyleSheet("background-color: white")
    self.label.setText("массив закрашенных клеток: " + str(self.getResult()))
 
class MainWindow(QWidget):
  def __init__(self):
    super().__init__()
    self.label = QLabel("нажмите на кнопку, чтобы получить массив")
    button = QPushButton("получить массив")
    button.clicked.connect(self.getArray)
    l = QVBoxLayout()
    l.addWidget(self.label)
    l.addWidget(button)
    self.setLayout(l)
  def getArray(self):
    editor = Editor(self)
    if QDialog.Accepted == editor.exec_():
      result = editor.getResult()
      self.label.setText("получен такой массив: " + str(result))
 
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
0
0 / 0 / 0
Регистрация: 21.03.2019
Сообщений: 21
07.05.2022, 14:09  [ТС]
А можно ли этот массив как-нибудь вывести в консоль, либо же сохранить в отдельном файле? Чтобы была возможность его скопировать и использовать уже в другой программе.
Просто, опять же, я могу построить рисунок, и массив выводится в новом окне, но как инициализировать выполнение кода, который я хочу разместить после вашего скрипта, мне пока что непонятно... Если я пытаюсь что-то написать после вашей программы, то появляется такая ошибка:

P. S. Я понимаю, что скорее всего задаю глупые вопросы) Но в программировании я новичок, далеко не со всеми инструментами умею работать
Миниатюры
Запись номеров закрашенных пикселей в массив  
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,657
07.05.2022, 15:14
хмм... Так?
Python
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
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QVBoxLayout, QLabel, QDialog
 
class Editor(QDialog):
  def __init__(self, parent):
    super().__init__(parent)
    self.grid = QGridLayout()
    self.grid.setSpacing(0)
    value = 0
    for column in range(16):
      for row in range(9,-1,-1):
        button = QPushButton()
        button.setStyleSheet("background-color: white")
        button.value = value
        button.state = False
        value = value + 1
        button.setFixedHeight(50)
        button.setFixedWidth(50)
        button.clicked.connect(self.click)
        self.grid.addWidget(button, row, column)
    self.label = QLabel("нажимайте кнопки для создания рисунка")
    self.label.setWordWrap(True)
    closeButton = QPushButton("закрыть редактор и передать массив")
    closeButton.clicked.connect(self.accept)
    l = QVBoxLayout()
    l.addLayout(self.grid)
    l.addWidget(self.label)
    l.addWidget(closeButton)
    self.setLayout(l)
  def getResult(self):
    result = []
    for column in range(16):
      for row in range(9,-1,-1):
        button = self.grid.itemAtPosition(row, column).widget()
        if button.state:
          result.append(button.value)
    return result
  def click(self):
    button = self.sender()
    button.state = not button.state
    if button.state:
      button.setStyleSheet("background-color: blue")
    else:
      button.setStyleSheet("background-color: white")
    self.label.setText("массив закрашенных клеток: " + str(self.getResult()))
 
app = QApplication(sys.argv)
editor = Editor(None)
while QDialog.Accepted != editor.exec_():
  pass
result = editor.getResult()
 
#дальше работаем с result
print(str(result))
0
0 / 0 / 0
Регистрация: 21.03.2019
Сообщений: 21
07.05.2022, 15:17  [ТС]
Да! Спасибо большое! Вы мне очень помогли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2022, 15:17
Помогаю со студенческими работами здесь

Дан массив A размера N. Вывести его элементы с удвоением их номеров в порядке возрастания номеров: A1, A2, A4, A8,…Условный оператор не использовать.
помогите с задачей . буду очень благодарен ... • Дан массив A размера N. Вывести его элементы с удвоением их номеров в порядке...

Массив: Получите массив пикселей, где каждый пиксель определяется как среднее между четырьмя пикселями исходного массива
Прошу вашей помощи поскольку даже не знаю как начать, заранее спасиб. Изображение задано двумерным массивом (n×m) пикселей, где 0...

Массив пикселей
Здравствуйте. Подскажите пожалуйста, как из изображения получить массив пикселей?

Массив пикселей
Хочу работать с графикой, попробовал различные библиотеки, но сейчас хочу создать что-то свое. Поэтому вопрос: как создать массив пикселей?...

Быстрый перевод значений цветов пикселей изображения в двоичную систему счисления и запись их в строку
Здравствуйте. Имеется изображение формата bmp. Для получения цветов пикселей использую Scanline. Вопрос в следующем, можно ли и как...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
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