zoukankan      html  css  js  c++  java
  • 取出资源文件中的bitmap,并将其保存到TMemoryStream中,从资源里载入图象而不丢失调色板

    从资源里载入图象而不丢失调色板

    procedure loadgraphic(naam:string);
    var
      { I've moved these in here, so they exist only during the lifetime of the
        procedure. }
      HResInfo: THandle;
      BMF: TBitmapFileHeader;
      MemHandle: THandle;
      Stream: TMemoryStream;
      ResPtr: PByte;
      ResSize: Longint;
      null:array [0..8] of char;
      
    begin
      { In this first part, you are retrieving the bitmap from the resource.
        The bitmap that you retrieve is almost, but not quite, the same as a
        .BMP file (complete with palette information). }

      strpcopy (null, naam);
      HResInfo := FindResource(HInstance, null, RT_Bitmap);
      ResSize := SizeofResource(HInstance, HResInfo);
      MemHandle := LoadResource(HInstance, HResInfo);
      ResPtr := LockResource(MemHandle);

      { Think of a MemoryStream almost as a "File" that exists in memory.
        With a Stream, you can treat either the same way! }

      Stream := TMemoryStream.Create;

      try
        Stream.SetSize(ResSize + SizeOf(BMF));

        { Next, you effectively create a .BMP file in memory by first writing
          the header (missing from the resource, so you add it)... }
        BMF.bfType := $4D42;
        Stream.Write(BMF, SizeOf(BMF));

        { Then the data from the resource. Now the stream contains a .BMP file }
        Stream.Write(ResPtr^, ResSize);

        { So you point to the beginning of the stream... }
        Stream.Seek(0, 0);

        { ...and let Delphi's TBitmap load it in }
        Bitmap:=tbitmap.create;
        Bitmap.LoadFromStream(Stream);

        { At this point, you are done with the stream and the resource. }
      finally
        Stream.Free;
      end;
      FreeResource(MemHandle);
    end;

  • 相关阅读:
    JVM,反射与动态代理
    11款实用的一句话网站设计代码
    Winform TextBox中只能输入数字的几种常用方法(C#)
    列表checkbox全选
    函数调用约定
    vs编译后在本机能运行,在别的机器上运行提示runtime Error的问题
    学习地形编程(一)
    Ogre中动态三维鼠标的实现
    讲讲volatile的作用
    绕任意轴旋转的推导
  • 原文地址:https://www.cnblogs.com/yzryc/p/6373574.html
Copyright © 2011-2022 走看看