You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中使用fast_noise生成噪声图案异常问题求助

问题根源

你使用了getNoiseInt2(x, y)方法,该方法接收整数坐标参数。在设置的低频率(0.005)下,相邻整数坐标对应的噪声采样点间隔极小,导致输出的噪声值几乎没有变化,最终仅生成极少不同的数值。

解决方案
  1. 更换噪声采样方法:改用getNoise2(double x, double y),传入浮点型坐标,获取连续变化的噪声值。
  2. 调整频率参数:过低的频率会让噪声图案过于平滑甚至出现大块相同区域,可尝试0.05~0.1区间的数值,根据需求调整细节丰富度。
  3. 修正颜色映射逻辑:将噪声值归一化到0~255的RGB有效范围,避免颜色偏暗或超出范围。
修改后的代码
import 'package:flutter/material.dart';
import 'package:fast_noise/fast_noise.dart';
import 'package:image/image.dart' as img;

class NoiseTest extends StatelessWidget {
  const NoiseTest({super.key});

  @override
  Widget build(BuildContext context) {
    final size = 256;

    // 调整频率为0.05,可根据需求修改
    final noise = SimplexFractalNoise(frequency: 0.05);

    num maxVal = double.negativeInfinity;
    num minVal = double.infinity;

    final tile = img.Image(width: size, height: size);

    final allVals = <num>{};
    int count = 0;

    // 先遍历一次获取噪声值的最大/最小值
    for (var x = 0; x < size; x++) {
      for (var y = 0; y < size; y++) {
        final noiseValue = noise.getNoise2(x.toDouble(), y.toDouble());
        allVals.add(noiseValue);
        count++;

        if (noiseValue > maxVal) maxVal = noiseValue;
        if (noiseValue < minVal) minVal = noiseValue;
      }
    }

    // 生成图像,使用归一化后的颜色值
    for (var x = 0; x < size; x++) {
      for (var y = 0; y < size; y++) {
        final noiseValue = noise.getNoise2(x.toDouble(), y.toDouble());
        // 归一化噪声值到0~1区间,再映射到0~255的RGB范围
        final normalized = (noiseValue - minVal) / (maxVal - minVal);
        final value = (normalized * 255).round();
        tile.setPixelRgb(x, y, value, value, value);
      }
    }

    print('min: $minVal, max: $maxVal');
    print(allVals.length);
    print(count);

    return Image.memory(img.encodePng(tile));
  }
}
说明

修改后,噪声值会呈现连续且丰富的变化,生成的灰度噪声图案会和预期效果更接近。你可以根据需求进一步调整frequency参数,或尝试不同的噪声类型(如PerlinFractalNoise)来获得更多样的效果。

内容的提问来源于stack exchange,提问作者Eddie Tribaldos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 12:30:55