Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将类转换为类库并实例化_C#_.net_Vb.net - Fatal编程技术网

C# 将类转换为类库并实例化

C# 将类转换为类库并实例化,c#,.net,vb.net,C#,.net,Vb.net,我有一个很久以前在VB.net中编写的类。我想在C语言中使用这个类,所以为了节省时间,我想我应该把它转换成一个类库。不过,我在做这件事时遇到了一些困惑。当我实例化我的原始类时,我会使用System.Drawing.Save方法来保存一个图像文件。请参见下面的imageConv.SavefilePath 导入系统。绘图 ... ... ' '将图像转换为更小、更易于管理的4位png ' 私有共享函数ConvertImagefilepath作为字符串作为字符串 使用图像作为新的位图文件路径 “做

我有一个很久以前在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方法

    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);
        }
    }
}