
24.03.2009, 09:39
|
Начинающий
|
|
Регистрация: 01.11.2008
Сообщения: 112
Репутация: 10
|
|
загрузка изображения из ресурсов
Доброго времени суток, решаю проблему загрузки изображения из ресурсов, создал файл ресурсов содержащий битмап (24 бит цвет),
при попытке загрузить его возникает ошибка Bitmap image is not valid при jpeg тоже самое
Исходый код взял с Delphi World тк Win Api начал изучать недавно :
Код:
unit load_res;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Image1: TImage;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
// procedure FormPaint(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
DLLInstance:THandle;
implementation
{$R *.dfm}
{$R uuu.rec}
procedure TForm1.BitBtn1Click(Sender: TObject);
const
BM = $4D42; {Идентификатор типа изображения}
var
Bmp: TBitmap;
BMF: TBitmapFileHeader;
HResInfo: THandle;
MemHandle: THandle;
Stream: TMemoryStream;
ResPtr: PByte;
ResSize: Longint;
begin
BMF.bfType := BM;
HResInfo := FindResource(HInstance, 'название изображения', RT_Bitmap);
MemHandle := LoadResource(HInstance, HResInfo);
ResPtr := LockResource(MemHandle);
{Создаем Memory-поток, устанавливаем его размер, записываем
туда заголовок изображения и, наконец, само изображение }
Stream := TMemoryStream.Create;
ResSize := SizeofResource(HInstance, HResInfo);
Stream.SetSize(ResSize + SizeOf(BMF));
Stream.Write(BMF, SizeOf(BMF));
Stream.Write(ResPtr^, ResSize);
{Освобождаем поток и сбрасываем его позицию в 0}
FreeResource(MemHandle);
Stream.Seek(0, 0);
{Создаем TBitmap и загружаем изображение из MemoryStream}
Bmp := TBitmap.Create;
Bmp.LoadFromStream(Stream);
Canvas.Draw(0, 0, Bmp);
Bmp.Free;
Stream.Free;
end;
end.

|