代码之家  ›  专栏  ›  技术社区  ›  kalan

Paint.net文件类型插件

  •  3
  • kalan  · 技术社区  · 16 年前

    找不到有关如何为Paint.net编写文件类型插件的任何信息。我在上只找到了visual studio模板 http://forums.getpaint.net/index.php?/topic/7984-filetype-plugin-template-v20/page__p__121651&#entry121651

    以及codeproject的小说明,但我不了解OnSave事件处理程序的所有参数,什么是PaintDotNet.Surface,以及如何处理存储在那里的数据。

    1 回复  |  直到 16 年前
        1
  •  9
  •   TimothyP    16 年前

    我曾经写过这样的插件。 先别管模板了,你可以从头开始。

    首先添加对PaintDotnet.Base、PaintDotnet.Core和PaintDotnet.Data的引用。

    接下来需要一个从FileType类继承的类:

    public class SampleFileType : FileType
    {
        public SampleFileType() : base ("Sample file type", FileTypeFlags.SupportsSaving |
                                    FileTypeFlags.SupportsLoading,
                                    new string[] { ".sample" })
        {
    
        }
    
        protected override void OnSave(Document input, System.IO.Stream output, SaveConfigToken token, Surface scratchSurface, ProgressEventHandler callback)
        {
            //Here you get the image from Paint.NET and you'll have to convert it
            //and write the resulting bytes to the output stream (this will save it to the specified file)
    
            using (RenderArgs ra = new RenderArgs(new Surface(input.Size)))
            {
                //You must call this to prepare the bitmap
                        input.Render(ra);
    
                //Now you can access the bitmap and perform some logic on it
                //In this case I'm converting the bitmap to something else (byte[])
                var sampleData = ConvertBitmapToSampleFormat(ra.Bitmap);
    
                output.Write(sampleData, 0, sampleData.Length);                
            }
        }
    
        protected override Document OnLoad(System.IO.Stream input)
        {
            //Input is the binary data from the file
            //What you need to do here is convert that date to a valid instance of System.Drawing.Bitmap
            //In the end you need to return it by Document.FromImage(bitmap)
    
            //The ConvertFromFileToBitmap, just like the ConvertBitmapSampleFormat,
            //is simply a function which takes the binary data and converts it to a valid instance of System.Drawing.Bitmap
            //You will have to define a function like this which does whatever you want to the data
    
            using(var bitmap = ConvertFromFileToBitmap(input))
            {
                return Document.FromImage(bitmap);
            }
        }
    }
    

    最后,您必须告诉Pain.Net您要加载哪些文件类型类,在本例中是一个实例,但是您可以在一个库中有多个实例。

    public class SampleFileTypeFactory : IFileTypeFactory
    {
        public FileType[] GetFileTypeInstances()
        {
            return new FileType[] { new SampleFileType() };
        }
    

    我希望这有帮助,让我知道如果你有问题。 }

    推荐文章