|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
загрузка изображения из ресурсов
Доброго времени суток, решаю проблему загрузки изображения из ресурсов, создал файл ресурсов содержащий битмап (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. |
#2
|
|||
|
|||
Зачем так сложно?
Вот работающий код: Код:
{$R uuu.res} procedure TForm1.Button1Click(Sender: TObject); var MyBmp: TBitmap; begin MyBmp := TBitmap.Create; try MyBmp.LoadFromResourceName(HInstance, 'MY_BMP'); Image1.Picture.Assign(MyBmp); // Canvas.Draw(10, 10, MyBmp); или так, если картинка должна быть на форме finally MyBmp.Free; end; end; MY_BMP BITMAP "uuu.bmp" Проверено на картинке с глубиной цвета 24 бит. Особенность. Наименование ресурса должно быть заглавными буквами и в текстовом файле и при указании в параметрах процедуры загрузки ресурса. К DelphiWorld следует относится настороженно: там много ошибок и не работающего кода Не забывайте делать резервные копии Последний раз редактировалось san-46, 24.03.2009 в 10:18. |
#3
|
|||
|
|||
Спасибо большое!!! И действительно это не первый мой случай проблем с кодами этого сайта
|
#4
|
|||
|
|||
Проблема с файлом.
Цитата:
А можно меня просветить куда надо кидать файл, а то полный ноль в этом деле. Кинул его на рабочий стол, с названием MY_BMP, он мне его в упор найти не может. |
#5
|
|||
|
|||
Цитата:
|