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

C#从二维数组构建Bitmap时如何获取原始像素值?

解决小尺寸Bitmap生成时的插值滤镜问题,获取原始像素值

兄弟,我太懂这种折腾小尺寸Bitmap却被插值滤镜坑的痛苦了!你遇到的模糊问题,本质是系统在Bitmap的绘制、展示环节默认开启了缩放插值,把你精心设置的黑白交替像素给糊成一团了。下面给你分场景说解决方案:

  • 先确保Bitmap创建环节无损
    从像素数组生成Bitmap时,一定要指定正确的颜色配置,别用默认的可能压缩的配置。比如在Android里,用ARGB_8888(支持全色彩+透明,最稳妥),避免颜色信息丢失:

    // 示例:假设你的像素数组是int[] pixels,宽width、高height
    Bitmap bitmap = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);
    
  • 绘制时强制关闭插值
    如果是用Canvas绘制这个Bitmap,默认的Paint会自动开启滤镜插值,这就是模糊的元凶!必须手动关掉:

    Paint paint = new Paint();
    paint.setFilterBitmap(false); // 核心:禁用插值滤镜
    paint.setAntiAlias(false); // 顺带关掉抗锯齿,避免边缘额外模糊
    canvas.drawBitmap(bitmap, xPos, yPos, paint);
    
  • 直接读取Bitmap的原始像素验证
    要是你想确认Bitmap里的像素是不是和你设置的完全一致,可以直接从Bitmap中读取原始像素数组对比:

    int[] extractedPixels = new int[width * height];
    // 把Bitmap的像素读取到数组里
    bitmap.getPixels(extractedPixels, 0, width, 0, 0, width, height);
    // 现在extractedPixels就是Bitmap里的原始像素,和你最初的数组对比就行
    
  • ImageView展示时避免缩放插值
    如果是把Bitmap放到ImageView里显示,ImageView默认会对小图做缩放优化,得改两个设置:

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="center" <!-- 保持原始尺寸,不做缩放 -->
        android:layerType="software" <!-- 规避硬件加速带来的隐性插值 -->
        />
    

    或者在代码里动态设置:

    imageView.setScaleType(ImageView.ScaleType.CENTER);
    imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    

要是你用的是其他平台(比如JavaFX、iOS),核心思路也一样——在创建Bitmap时用无损配置,在绘制/展示环节关闭所有插值、抗锯齿类的优化选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:17:50