C# 将类转换为类库并实例化
我有一个很久以前在VB.net中编写的类。我想在C语言中使用这个类,所以为了节省时间,我想我应该把它转换成一个类库。不过,我在做这件事时遇到了一些困惑。当我实例化我的原始类时,我会使用System.Drawing.Save方法来保存一个图像文件。请参见下面的imageConv.SavefilePath 导入系统。绘图 ... ... ' '将图像转换为更小、更易于管理的4位png ' 私有共享函数ConvertImagefilepath作为字符串作为字符串 使用图像作为新的位图文件路径 “做事 '将其转换为4BPP 使用imageConv=BitmapEncoder.Convertimage,4 '更新要保存的文件路径 filepath=Path.GetTempPath&image.png '保存到磁盘 imageConv.Savefilepath 终端使用 终端使用 ConvertImage=文件路径 端函数 现在,当我将该类复制到类库项目中,在我的C项目中添加引用并实例化该类时,我不能再使用Save方法C# 将类转换为类库并实例化,c#,.net,vb.net,C#,.net,Vb.net,我有一个很久以前在VB.net中编写的类。我想在C语言中使用这个类,所以为了节省时间,我想我应该把它转换成一个类库。不过,我在做这件事时遇到了一些困惑。当我实例化我的原始类时,我会使用System.Drawing.Save方法来保存一个图像文件。请参见下面的imageConv.SavefilePath 导入系统。绘图 ... ... ' '将图像转换为更小、更易于管理的4位png ' 私有共享函数ConvertImagefilepath作为字符串作为字符串 使用图像作为新的位图文件路径 “做
private static void compressBitmap(ImageData imgData)
{
using (Bitmap imageRaw = new Bitmap(imgData.bmpFilePath))
{
using (ConvertBitmap imageCompressed = new ConvertBitmap())
{
imageCompressed.Convert(imageRaw, 4);
//imageCompressed.Save(imgData.bmpFilePath);
}
}
}
我错过了什么?我知道我需要实例化ConvertBitmap imageCompressed=new ConvertBitmap.ConvertimageRaw,4,但它说“Convert”不存在于类型“ConvertBitmap”中。确实如此。这是一项公共活动
导入系统。绘图
导入System.Runtime.InteropServices
导入Microsoft.Win32.SafeHandles
'
'快速将位图复制到相同尺寸的1bpp/4bpp/8bpp位图
'
公共类ConvertBitmap:实现IDisposable
'标志:是否已调用Dispose?
设置为布尔值=False
'实例化一个SafeHandle实例。
尺寸句柄为SafeHandle=新SafeFileHandleIntPtr.Zero,True
'
'消费者可调用的Dispose模式的公共实现。
'
公共次级处置_
实现IDisposable.Dispose
处置者
GC.eme
端接头
'
'受保护的Dispose模式实现。
'
'
受保护的可重写子处理作为布尔值
如果处置完毕,则返回
如果是这样的话
处理
'在此处释放任何其他托管对象。
'
如果结束
已处置=真
端接头
'原始位图
'1或8,目标bpp
'位图的1bpp副本
公共函数Convertb为位图,bpp为整数为位图
选择案例bpp
案例1
案例4
案例8
其他情况
抛出新ArgumentException BPP必须为1、4或8
结束选择
“计划:内置于Windows GDI中的是转换
'从一种格式到另一种格式的位图。大多数时候,这个
“这项工作实际上是由图形硬件加速卡完成的
"速度极快。剩下的时间里,这项工作是由
'非常快的本机代码。
“我们将从C调用此GDI功能。我们的计划:
'1将位图转换为GDI hbitmap,即复制非托管->托管
'2创建GDI单色hbitmap
'3使用GDI BitBlt函数将hbitmap复制为单色,如上所述
'4将monochrone hbitmap转换为位图,即复制非托管->托管
尺寸w为整数=b.宽度,h为整数=b.高度
尺寸hbm为IntPtr=b.GetHbitmap
“这是第一步
'
'步骤2:创建单色位图。
'BITMAPINFO是我们在下面定义的互操作结构。
在GDI术语中,它是一个BITMAPHEADERINFO,后跟一个由两个RGBquad组成的数组
将bmi设置为新的位图信息
bmi.biSize=40
'BITMAPHEADERINFO结构的大小
bmi.biWidth=w
bmi.biHeight=h
bmi.biPlanes=1
"飞机让人困惑。我们总是只使用1。阅读MSDN了解更多信息。
bmi.biBitCount=CShortbpp
“即1bpp或8bpp
bmi.biCompression=\u biRgb
例如,RGBQUAD表中的像素存储为RGB,而不是调色板索引
bmi.biSizeImage=CUIntw+7和&HFFFFFFF8*h/8
bmi.biXPelsPerMeter=1000000
“不太重要
bmi.biYPelsPerMeter=1000000
“不太重要
“现在来看看颜色表。
将ncols设置为UInteger=CUInt1获取此错误消息的原因: 类型“ConvertBitmap”中不存在“Convert” 这一行代码并不像你想象的那样:
ConvertBitmap imageCompressed = new ConvertBitmap.Convert(imageRaw, 4))
该代码正在查找名为Convert的类型,而不是ConvertBitmap类中声明的方法,该类具有以位图和int作为参数的构造函数。显然没有这样的类型
您实际需要做的是创建一个ConvertBitmap对象,调用其Convert方法来获取位图对象,然后调用Save:
您应该发布Convert和ConvertBitmap类的签名。另一方面,回答问题的人只能猜测。@CoderofCode good call-updated。没有System.Drawing.Save方法。您可能正在讨论System.Drawing.Image类的Save方法。您不会将类转换为类libr
阿瑞。它们是两个完全不同的东西。这就像把水变成一杯水。无稽之谈的创建类库项目,然后向其中添加一个类。OT:ConvertBitmap对于类来说是个坏名字。类型名称应基于名词,而方法名称应基于动词。ConvertBitmap是基于动词的,适用于转换位图的方法。你的类应该命名为BitmapConverter。我知道我错过了什么。该死的!谢谢
private static void compressBitmap(ImageData imgData)
{
using (Bitmap imageRaw = new Bitmap(imgData.bmpFilePath))
{
using (ConvertBitmap imageCompressed = new ConvertBitmap())
{
imageCompressed.Convert(imageRaw, 4).Save(imgData.bmpFilePath);
}
}
}