processing像素画教程

news2024/12/22 17:31:04

前提:各位已经安装了processing

第一步:创建一个简单的网格

我们首先创建一个网格来定义我们作品的像素画布。网格将帮助您在适当的位置绘制每个像素。

int gridSize = 20; // 每个像素的大小
int cols, rows;
void setup() {
  size(400, 400); // 设置画布大小
  cols = width / gridSize;
  rows = height / gridSize;
  noLoop(); // 不需要在draw中不断重复
}

void draw() {
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      stroke(200); // 网格线颜色
      noFill();
      rect(i * gridSize, j * gridSize, gridSize, gridSize);
    }
  }
}

这个width是内置的变量,height也是内置变量,一般和你 size(400, 400);就是上面你设置的400,400

cols = width / gridSize; 代表的是多少列个方格,rows = height / gridSize; 代表的是多少行个方格

咱们使用 rect()函数,咱们可以查看官网,官网是这样介绍的:

就是绘制矩形而已

运行展示:

第二步:绘制像素

使用fill()和rect()来填充网格中的特定方块,这就是“绘制”一个像素。

void draw() {
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      stroke(200);
      noFill();
        
      rect(i * gridSize, j * gridSize, gridSize, gridSize);
      // 示例:绘制一个红色色块
      if (i == 5 && j == 5) {
        fill(255, 0, 0); // 红色
        rect(i * gridSize, j * gridSize, gridSize, gridSize);
      }
    }
  }
}

fill函数是填充颜色的意思,它在 rect()函数的前面,就意味着填充这个单独的rect方块

运行展示:

完整代码:

int gridSize = 20; // 每个像素的大小
int cols, rows;
void setup() {
  size(400, 400); // 设置画布大小
  cols = width / gridSize;
  rows = height / gridSize;
  noLoop(); // 不需要在draw中不断重复
}

void draw() {
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      stroke(200);
      noFill();
        
      rect(i * gridSize, j * gridSize, gridSize, gridSize);
      // 示例:绘制一个红色色块
      if (i == 5 && j == 5) {
        fill(255, 0, 0); // 红色
        rect(i * gridSize, j * gridSize, gridSize, gridSize);
      }
    }
  }
}

第三步:将图片像素化

咱们了解以上基本内容之后,就可以实现将图片像素化的过程

完整演示代码如下:

PImage img;       // 存储加载的图像
int blockSize = 10; // 每个像素块的大小

void setup() {
  size(400, 400);
  img = loadImage("C:\\Users\\Administrator\\Desktop\\t1.png"); // 替换为您图像的文件名
  img.resize(width, height); // 调整图像大小以适应窗口
}

void draw() {
  pixelateImage();
}

void pixelateImage() {
  for (int x = 0; x < img.width; x += blockSize) {
    for (int y = 0; y < img.height; y += blockSize) {
      color avgColor = averageColor(x, y);
      fill(avgColor);
      noStroke();
      rect(x, y, blockSize, blockSize);
    }
  }
}

// 计算给定块的平均颜色
color averageColor(int startX, int startY) {
  int r = 0, g = 0, b = 0;
  int count = 0;
  
  for (int dx = 0; dx < blockSize; dx++) {
    for (int dy = 0; dy < blockSize; dy++) {
      int currentX = startX + dx;
      int currentY = startY + dy;
      
      // 检查是否在图像边界内
      if (currentX < img.width && currentY < img.height) {
        color currentColor = img.get(currentX, currentY);
        r += red(currentColor);
        g += green(currentColor);
        b += blue(currentColor);
        count++;
      }
    }
  }
  
  // 返回平均颜色
  return color(r / count, g / count, b / count);
}

效果展示图:

首先,咱们需要一个存储加载的图像,就是上文的PImage img;

第二,设置每个像素块的大小,int blockSize = 10;

第三, 给每个像素块上色,这里上色用的是 给定块的平均颜色 (这里说一下,noStroke();是不设置网格线颜色)

其算法我单独拿下来给各位讲解:

// 计算给定块的平均颜色
color averageColor(int startX, int startY) {
  int r = 0, g = 0, b = 0;
  int count = 0;
  for (int dx = 0; dx < blockSize; dx++) {
    for (int dy = 0; dy < blockSize; dy++) {
      int currentX = startX + dx;
      int currentY = startY + dy;
      
      // 检查是否在图像边界内
      if (currentX < img.width && currentY < img.height) {
        color currentColor = img.get(currentX, currentY);
        r += red(currentColor);
        g += green(currentColor);
        b += blue(currentColor);
        count++;
      }
    }
  }
  
  // 返回平均颜色
  return color(r / count, g / count, b / count);
}

众所周知,颜色是由rgb决定的,这个算法很简单img.get是获取图片每一处的颜色的,r/count意味着这个像素块里面的红色除以这个像素块每个像素点,得到的就是像素的平均颜色,同理如下,count++是计算每个像素块的像素点的,按照我说的这个count应该为100.咱们可以测试一下:在返回平均颜色的上面加入打印count

咱们可以看到就是100,因为一个像素块长10像素点,宽10像素点,10*10可不就100.

第四步:修改图片像素化的模糊程度

咱们经过上面的学习,可以明白,如果想要图片像素更加清晰,那么咱们可以直接将像素块调小一点,这样计算平均值填充的颜色将会更加清晰。以下是将像素块调成5之后的效果

当然,咱们调成1,那就是原画了

后续教学我会继续在以下项目的processing版本进行更新nanshaws/LibgdxTutorial: libgdx 教程项目 本项目旨在提供完整的libgdx桌面教程,帮助开发者快速掌握libgdx游戏开发框架的使用。成功的将gdx-ai和ashley的tests从官网剥离出来,并成功运行。libgdx tutorial project This project aims to provide a complete libgdx desktop tutorial to help developers quickly master the use of libgdx game development framework. Successfully separated GDX-AI and Ashley's tests from the official website and ran them (github.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2204158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s 的网络通信

目录 1 k8s通信整体架构 2 flannel 网络插件 2.1 flannel 插件组成 2.2 flannel 插件的通信过程 2.3 flannel 支持的后端模式 3 calico 网络插件 3.1 calico 简介 3.2 calico 网络架构 3.3 部署 calico 1 k8s通信整体架构 k8s通过CNI接口接入其他插件来实现网络通讯。目前比较…

QTableView加入小灯泡

通过重载QAbstractTableModel中的data方法 QVariant CTblModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); int col index.column(); if (col ledColIndex && role Qt::DecorationRole) { return Q…

股指期货的杠杆是怎么体现和使用的?

股指期货的杠杆效应是通过保证金交易实现的。投资者只需支付合约价值的一小部分作为保证金&#xff0c;即可控制整个合约的价值。例如&#xff0c;如果一个股指期货合约的价值为100,000元&#xff0c;而保证金比例为10%&#xff0c;那么投资者只需支付10,000元即可控制这个合约…

PPT分享:埃森哲-业务流程BPM能力框架体系

PPT下载链接见文末~ 业务流程管理&#xff08;BPM, Business Process Management&#xff09;的能力框架体系是一个全面、系统的流程管理方法论和工具集&#xff0c;旨在帮助企业优化和持续改进其业务流程&#xff0c;从而提升运营效率和市场竞争力。 一、BPM能力框架体系概述…

云计算的江湖,风云再起

大数据产业创新服务媒体 ——聚焦数据 改变商业 还记得当年英特尔的广告语吗&#xff1f;“Intel Inside”&#xff0c;这个标志性的标签几乎成了计算设备的象征。然而&#xff0c;随着AI大模型的迅速崛起&#xff0c;计算的核心从CPU悄然转向了GPU。一场前所未有的技术革命正…

【学术会议征稿】第四届公共管理与大数据分析国际学术会议(PMBDA 2024)

第四届公共管理与大数据分析国际学术会议(PMBDA 2024) 2024 4th International Conference on Public Management and Big Data Analysis 第四届公共管理与大数据分析国际学术会议 &#xff08;PMBDA 2024&#xff09;将于2024年12月20-22日在中国青岛召开。会议主题主要围绕…

MySQL-表相关(DDL DML)

文章目录 表的基本操作表的创建表的删除 MySQL中的数据类型整数类型浮点数类型定点数类型日期和时间类型字符串类型charvarchartext 二进制类型 DDL语句查看建表语句修改表名新增字段修改字段(名类型)修改字段(仅类型)删除字段 表的基本操作 在介绍DDL和DQL的操作语句之前, 我…

HCIP-HarmonyOS Application Developer 习题(六)

&#xff08;多选&#xff09;1、Harmonyos多窗口交互能力提供了以下哪几种交互方式? A. 平行视界 B.全局消息通知 C.分屏 D.悬浮窗 答案&#xff1a;ACD 分析&#xff1a;系统提供了悬浮窗、分屏、平行视界三种多窗口交互&#xff0c;为用户在大屏幕设备上的多任务并行、便捷…

V2M2引擎传奇全套源码2024BLUE最新版 可自定义UI

特点优势是最新XE10.4或者XE12编辑器&#xff0c;微端&#xff0c;各种自定义UI 无限仿GOM引擎功能下载地址:BlueCodePXL_415.rar官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 提取码: AuX7BlueCodePXL_415.rar官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘…

无需复杂计算!如何用“加法”打造高效而低功耗的语言模型

当我们聊到人工智能特别是语言模型时,大家脑海中可能浮现的都是庞大的计算能力、高能耗的服务器群。然而,最近有一篇有趣的论文《Addition Is All You Need for Energy-Efficient Language Models》(加法才是低能耗语言模型的关键)却颠覆了我们对语言模型的传统认知。那么,…

Redis高级篇 —— 分布式缓存

Redis高级篇 —— 分布式缓存 文章目录 Redis高级篇 —— 分布式缓存1 Redis持久化1.1 RDB1.2 RDB的fork原理1.3 RDB总结1.4 AOF持久化1.5 RDB和AOF的对比 2 Redis主从2.1 搭建主从架构2.2 数据同步原理2.2.1 全量同步2.2.2 增量同步 3 Redis哨兵3.1 哨兵的作用和原理3.1.1 哨兵…

基于IOU匹配的DeepSort目标跟踪与匈牙利算法解析

在多目标跟踪任务中&#xff0c;如何将检测框与已有轨迹进行关联&#xff0c;进而维持目标的连续跟踪&#xff0c;是一个关键问题。DeepSort&#xff08;Deep Simple Online and Realtime Tracking&#xff09;是一种常用的多目标跟踪算法&#xff0c;它结合了IOU&#xff08;交…

Linux搭建Hadoop集群(详细步骤)

前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下&#xff0c;开发分布式程序。充分利用集群的威力进行高速运算和存储。 说白了就是实现一个任务可以在多个电脑上计算的过程。 一&#xff1a;准备工具 1.1 VMware 1.2L…

利用内部知识库优化SOP与HR培训效果评估

在当今快速变化的商业环境中&#xff0c;企业运营的高效性和员工的综合能力成为决定竞争力的关键因素。SOP作为确保业务一致性和质量的基础&#xff0c;其有效执行至关重要。同时&#xff0c;HR培训作为提升员工技能和知识的重要手段&#xff0c;其效果直接影响到企业的整体绩效…

【顶刊核心变量】中国地级市绿色金融试点改革试验区名单数据(2010-2023年)

一、测算方式&#xff1a; 参考《中国工业经济》崔惠玉&#xff08;2023&#xff09;老师的研究&#xff0c;2017 年&#xff0c;国务院决定将浙江、广东、江西、贵州和新疆的部分地区作为绿色金融改革创新试验 区的首批试点地区。试点地区在顶层设计、组织体系、产品创新、配…

Docker容器简介及部署方法

1.1 Docker简介 Docker之父Solomon Hykes&#xff1a;Docker就好比传统的货运集装箱 2008 年LXC(LinuX Contiainer)发布&#xff0c;但是没有行业标准&#xff0c;兼容性非常差 docker2013年首次发布&#xff0c;由Docker, Inc开发 1.1.1什么是Docker Docker是管理容器的引…

java脚手架系列4--测试用例、拦截器

异常处理、拦截器、数据库连接 1 测试用例 单元测试是一个老生常谈的问题&#xff0c;无论是后端对自己的代码质量把的第一道关也好&#xff0c;也是对测试减缓压力。这里就不过多讲述测试用例的重要性&#xff0c;但是有2个框架我们必须了解一下。 1.1 JUnit和mockito 我们…

【gRPC】4—gRPC与Netty

gRPC与Netty ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; &#x1f4d6;RPC专栏&#xff1a;https://…

TadTR(TIP 2022)视频动作检测方法详解

前言 论文&#xff1a;End-to-end Temporal Action Detection with Transformer 代码&#xff1a;TadTR 从论文题目可以看出 TadTR 是基于 Transformer 的端到端的方法&#xff0c;TAD 在视频动作分类任务上更进一步&#xff0c;不仅对动作分类&#xff0c;还要检测动作发生的…

力扣21~30题

21题&#xff08;简单&#xff09;&#xff1a; 分析&#xff1a; 按要求照做就好了&#xff0c;这种链表基本操作适合用c写&#xff0c;python用起来真的很奇怪 python代码&#xff1a; # Definition for singly-linked list. # class ListNode: # def __init__(self, v…