Fórum Como armazenar uma imagem com de 256 cores numa DLL. #169061

12/07/2003

0

Olá,

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

Tenil

Responder

Posts

14/07/2003

Tenil

Pô, ninguém se arrisca?

Tô precisando mesmo.

Ajudaí.

Valeu,

Roberto
Brasília-DF


Responder

Gostei + 0

15/07/2003

Tenil

Pô, tô sentindo que estou sendo limado. :cry:


Responder

Gostei + 0

18/07/2003

Leoback

Jovem amigo!

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


Responder

Gostei + 0

21/07/2003

Tenil

Kra, valeu mesmo.

Vou fazer o que vc disse.

Muuuuito obrigado.

T+

Roberto


Responder

Gostei + 0

21/07/2003

Tenil

Leoback, belezzz?

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


Responder

Gostei + 0

29/07/2003

Leoback

Prezado Roberto,

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


Responder

Gostei + 0

29/07/2003

Tenil

Mais uma vez, obrigado Leo.

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


Responder

Gostei + 0

14/08/2003

Leoback

Prezado Roberto,

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)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar