C++builder 如何将新位图格式添加到TBitMapCodeManager

C++builder 如何将新位图格式添加到TBitMapCodeManager,c++builder,codec,firemonkey-fm3,c++builder-xe5,tbitmap,C++builder,Codec,Firemonkey Fm3,C++builder Xe5,Tbitmap,我已经编写了一个用于读写PPM文件的类(不要问,我没有选择这种格式)。我希望它成为TBitmap加载/保存系统的一部分 有人知道我如何添加此支持吗?我真的需要编写/安装完整的编解码器吗 解决方案: 在Remy Lebeau的帖子中,我成功地编写并注册了一个编解码器。但是,所有需要的功能都没有文档记录,因此需要一些尝试/错误才能使其正常工作 要注册新的编解码器,您需要像下面这样使用tbitmapcodemanager的静态成员RegisterBitmapCodecClass TBitmapCode

我已经编写了一个用于读写PPM文件的类(不要问,我没有选择这种格式)。我希望它成为
TBitmap
加载/保存系统的一部分

有人知道我如何添加此支持吗?我真的需要编写/安装完整的编解码器吗

解决方案:

在Remy Lebeau的帖子中,我成功地编写并注册了一个编解码器。但是,所有需要的功能都没有文档记录,因此需要一些尝试/错误才能使其正常工作

要注册新的编解码器,您需要像下面这样使用
tbitmapcodemanager
的静态成员
RegisterBitmapCodecClass

TBitmapCodecManager::RegisterBitmapCodecClass(".ppm","portable pixmap",true,__classid(TMyCodec));
编解码器需要定义以下功能:

class TMyCodec : public TCustomBitmapCodec {

    public:
        bool __fastcall LoadFromStream(System::Classes::TStream* const AStream, Fmx::Surfaces::TBitmapSurface* const Bitmap);
        bool __fastcall LoadFromFile(const System::UnicodeString AFileName, Fmx::Surfaces::TBitmapSurface* const Bitmap);

        bool __fastcall SaveToFile(const System::UnicodeString AFileName, Fmx::Surfaces::TBitmapSurface* const Bitmap, const PBitmapCodecSaveParams SaveParams = (PBitmapCodecSaveParams)(0x0));
        bool __fastcall SaveToStream(System::Classes::TStream* const AStream, Fmx::Surfaces::TBitmapSurface* const Bitmap, const System::UnicodeString Extension, const PBitmapCodecSaveParams SaveParams = (PBitmapCodecSaveParams)(0x0));

        __classmethod System::Types::TPointF __fastcall GetImageSize(const System::UnicodeString AFileName);
        __classmethod bool __fastcall IsValid(System::Classes::TStream* const AStream);

        bool __fastcall LoadThumbnailFromFile(const System::UnicodeString AFileName, const float AFitWidth, const float AFitHeight, const bool UseEmbedded, Fmx::Surfaces::TBitmapSurface* const Bitmap);
};
Fmx::Surfaces::TBitmapSurface
没有文档记录,但是IDE为我提供了可用的函数。我认为
像素[x][y]
数组用于读取/写入像素

注册类后,可以像往常一样使用
TBitmap->LoadFromFile(“”)读取新的图像类型

享受吧


附言:那些投票决定关闭此网站的人,请发表评论,说明原因?如果我们不知道我们会犯什么错误,我们如何改进呢?

您需要从中派生一个新类,并实现虚拟的
LoadFrom…()
SaveTo…()
方法,然后在应用程序启动时使用注册该类。

谢谢,正是我需要的信息:)