Types 模块重构从编译器创建不同类型的请求?

Types 模块重构从编译器创建不同类型的请求?,types,rust,image-resizing,Types,Rust,Image Resizing,为什么我在重构时会收到不同类型的编译器请求,以便在图像库周围使用包装器 基本上,调整大小似乎总是u16输出,那么为什么我的更改要求u8,而原始代码从未要求此转换 extern crate resize; use resize::Type; use resize::Pixel; pub struct Resize{ w1:usize, h1:usize, w2:usize, h2:usize, src: Vec<u16>, } impl R

为什么我在重构时会收到不同类型的编译器请求,以便在图像库周围使用包装器

基本上,调整大小似乎总是
u16
输出,那么为什么我的更改要求
u8
,而原始代码从未要求此转换

extern crate resize;

use resize::Type;
use resize::Pixel;

pub struct Resize{
    w1:usize,
    h1:usize,
    w2:usize,
    h2:usize,
    src: Vec<u16>,
}

impl Resize {
    pub fn new(
        ow:usize, 
        oh:usize, 
        dw:usize, 
        dh:usize,
        inc: Vec<u16>
    ) -> Resize {
        Resize {
            w1:ow,
            h1:oh,
            w2:dw,
            h2:dh,
            src:inc,
        }
    }

    pub fn run(&self) -> Vec<u16> {
        let mut dst = vec![0;self.w2*self.h2];
        resize::resize(
            self.w1, 
            self.h1, 
            self.w2, 
            self.h2, 
            Pixel::RGBA64, 
            Type::Lanczos3, 
            self.src.as_slice(), 
            &mut dst,
        );
        dst
    }
}
外部板条箱调整尺寸;
使用resize::Type;
使用resize::像素;
发布结构调整大小{
w1:使用,
h1:使用,
w2:使用,
h2:使用,
src:Vec,
}
impl调整大小{
新店(
ow:使用,
哦:用,
德国之声:使用,
dh:使用,
公司名称:Vec
)->调整大小{
调整大小{
w1:噢,
h1:噢,
w2:dw,
h2:dh,
src:inc,
}
}
发布fn运行(&self)->Vec{
让mut dst=vec![0;self.w2*self.h2];
调整大小::调整大小(
self.w1,
self.h1,
self.w2,
self.h2,
像素::RGBA64,
类型::Lanczos3,
self.src.as_slice(),
&mut dst,
);
dst
}
}
编译器错误消息

错误[E0308]:类型不匹配
-->src/main.rs:24:45
|
24 |让图像=调整大小::新建(w1、h1、w2、h2、src);
|^^^应为u16,找到u8
|
=注意:应为'std::vec::vec'类型`
找到类型“std::vec::vec”`
=帮助:以下是一些可能满足您需要的功能:
-.to_vec()
错误[E0308]:类型不匹配
-->src/main.rs:30:54
|
30 |编码器.写入|头().展开().写入|图像|数据(dst).展开();
|^^^预期为u8,发现为u16
|
=注:预期类型`&[u8]`
找到类型`&[u16]`

TL;DR:
src
变量的预期类型为
Vec
,但由于类型推断,它被设置为
Vec


变量
src
在以下行中赋值:

let mut src = vec![0;info.buffer_size()];
它稍后通过调用以下命令推断类型为
Vec

reader.next_frame(&mut src).unwrap();

因为这些函数需要类型
&mut[u8]
,而不是
&mut[u16]

如果我们在分配
src
时显式设置预期类型
Vec

let mut src: Vec<u16> = vec![0; info.buffer_size()];

请提供更准确的数据。您的问题应该使我们能够重现问题,而无需访问外部链接或推断未提及的API使用情况。特别地,其中是包括行
let image=Resize::new(w1、h1、w2、h2、src)的代码
let mut src: Vec<u16> = vec![0; info.buffer_size()];