Fórum Como armazenar uma imagem com de 256 cores numa DLL. #169061
12/07/2003
0
Tenho algumas imagens que preciso armazenar dentro de uma .dll, já sei como fazer isto. O problema é que, quando incluo as imagens em um arquivo *.res, no Image Editor, ela perde as cores, ficando no máximo com 256.
Preciso salvar essas imagens com boa definição.
Por favor, ajude-me.
Obrigado,
Roberto Santos Silva

Tenil
Curtir tópico
+ 0Posts
14/07/2003
Tenil
Tô precisando mesmo.
Ajudaí.
Valeu,
Roberto
Brasília-DF
Gostei + 0
15/07/2003
Tenil
Gostei + 0
18/07/2003
Leoback
Primeiramente gostaria de fazer um comentário antes de responder ao que você solicitou. Não pense que os colaboradores daqui do Fórum não dão atenção ao que se solicita em termos de dúvidas. Muitas vezes nem todos tem a oportunidade de ler a grande quantidade de informação que é depositada diariamente aqui e, também, muitos antes de responder precisam pesquisar, afim de garantir a veracidade das informações passadas. Não se chateie com o meu comentário, OK!
Com relação a sua dúvida, é possível usar arquivos com a extensão JPG e/ou BMP com qualquer resolução e quantidade de cores. Mas no image editor existe uma limitação no número de cores que se pode usar para criar um arquivo RES. No meu exemplo eu usei 2 arquivos JPG e 1 BMP com 16 milhões de cores/cada.
Agora, respondendo a sua pergunta... segue um passo-a-passo para criar a ´resource DLL´:
1 - Crie uma pasta em seu disco rígido - C:\Resdll
2 - Crie um arquivo texto com o nome ´resdll.rc´ (por exemplo) - Abra esse arquivo (com o notepad.exe) e digite:
Image01 JPEG ´C:\Resdll\nomedoarquivo01.jpg´
Image02 JPEG ´C:\Resdll\nomedoarquivo02.jpg´
Image03 bitmap ´C:\Resdll\nomedoarquivo03.bmp´
3 - Salve as alterações no arquivo .rc e no prompt do MSDOS (Via Windows) entre no diretório que contém o seu arquivo .rc e digite: brcc32 resdll.rc
4 - A partir desse momento o compilador terá criado o arquivo ´resdll.res´ em seu diretório.
5 - Abra o Borland Delphi, Crie uma nova DLL e acrescente jpeg na seção uses da DLL.
6 - Substitua {$R *.res} por {$R resdll.RES}
7 - Salve o projeto da DLL (na mesma pasta que contém o arquivo .res) com o nome ResDll, vá no menu Project e selecione a opção Build.
8 - Pronto! O Delphi irá criar o arquivo resdll.dll
9 - Para visualizar o ´conteúdo´ da sua DLL, procure por um utilitário chamado Resource Explorer na Internet (existem outros).
Obs: Mas atenção com o tamanho do arquivo... Quanto mais recursos incluir maior será o tamanho final do arquivo.dll... No meu exemplo, a DLL passou rapidamente de 600Kb p/ 2.23 MB (após incluir o BMP)
Por hora é só o que sei sobre a sua solicitação!
Um abraço
Leo
Gostei + 0
21/07/2003
Tenil
Vou fazer o que vc disse.
Muuuuito obrigado.
T+
Roberto
Gostei + 0
21/07/2003
Tenil
Criei o arquivo resdll.rc
Digitei o seguinte:
fundo_0 JPEG ´fundo_0.jpg´
fundo_1 JPEG ´fundo_1.jpg´
fundo_2 JPEG ´fundo_2.jpg´
fundo_3 JPEG ´fundo_3.jpg´
fundo_4 JPEG ´fundo_4.jpg´
Criei a dll, tudo na boa.
Fiz o seguinte procedimento:
procedure TForm1.Button1Click(Sender: TObject);
var
Bmp: TBitmap;
HandleDLL: THandle;
begin
HandleDLL := LoadLibrary(´resdll.DLL´);
Bmp := TBitmap.Create;
Bmp.Handle := LoadBitmap(HandleDLL, ´fundo_0´);
Image1.Picture.Bitmap := Bmp;
Bmp.Free;
FreeLibrary(HandleDLL);
end;
Kra, a imagem não aparece de jeito nenhum, já tentei de várias formas, me de um help, valeu.
Roberto
Gostei + 0
29/07/2003
Leoback
O código que você escreveu ´é apropriado´ para carregar recursos com a classe TBitmap. Oberve que você criou uma Resource DLL com a classe TJpegImage (Jpeg) e o código para visualiza-las é um pouco diferente. Segue um exemplo da Borland que eu adaptei para ser usado com a sua DLL de recursos.
private //declare a procedure
procedure LoadJPEGFromRes(TheJPEG:string;ThePicture:TPicture);
//Abaixo da seção implementation
procedure TForm1.LoadJPEGFromRes(TheJPEG:string;ThePicture:TPicture);
var
MyHandle : THandle;
ResHandle : THandle;
MemHandle : THandle;
MemStream : TMemoryStream;
ResPtr : PByte;
ResSize : Longint;
JPEGImage : TJPEGImage;
begin
MyHandle := LoadLibrary(´Resourcedll.dll´); //o nome da DLL
ResHandle := FindResource(MyHandle, PChar(TheJPEG),´JPEG´);
MemHandle := LoadResource(MyHandle, ResHandle);
ResPtr := LockResource(MemHandle);
MemStream := TMemoryStream.Create;
JPEGImage := TJPEGImage.Create;
ResSize := SizeOfResource(MyHandle, ResHandle);
MemStream.SetSize(ResSize);
MemStream.Write(ResPtr^, ResSize);
FreeResource(MemHandle);
MemStream.Seek(0, 0);
JPEGImage.LoadFromStream(MemStream);
ThePicture.Assign(JPEGImage);
JPEGImage.Free;
MemStream.Free;
end;
//No evento OnClick do Botão...
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
LoadJPEGFromRes(´fundo_0´,Image1.Picture);
end;
Nesse exemplo, eu usei um TForm, um TImage, um TBitBtn e acrescentei Jpeg na uses do form. Você pode acrescentar outros Botões e para cada um, definir o nome do recurso que quer visualizar no TImage. E naõ se esqueça de declarar a Procedure LoadJPEGFromRes na seção Private do form Ok!
Um abraço
Leo
Gostei + 0
29/07/2003
Tenil
Só que agora está rolando um outro erro:
[b:4538e9a35c]Project Secretaria.exe raised exception class EJPEG with message ´JPEG error #41´. Process stopped. Use Step or Run to continue.[/b:4538e9a35c]
Não quero abusar brother, é que realmente preciso e ainda não estou nesse nível de programação. Mas tenho estudado.
[]s
Roberto
Gostei + 0
14/08/2003
Leoback
Não tenho idéia do que pode estar acontecendo p/ este erro ocorrer. Eu compilei o código da DLL e do executável e funcionou corretamente. Em todo caso, envie-me um e-mail que te mando todo o projeto p/ que você possa analisar.
Um abraço
Leo (leoback@ig.com.br)
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)