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()];