Ir para conteúdo
Fórum Script Brasil
  • 0

Não Querer Carregar Uma Imagem Em Branco


Guest Iuri

Pergunta

Olá, estou fazendo um método que funde duas imagens e coloca o resultado em uma terceira. Já fiz de duas formas e ambas funcionaram direito. Mas o problema é que da forma que eu estou fazendo (tá em baixo o código), apesar de funcionar, me obriga a carregar uma imagem em bmp em branco, o que fica pesado. O que eu poderia fazer para salvar nessa imagem sem ter que carregar uma em branco? Eu já tentei setar a imagem criada como weight e height 512, mas aí a imagem formada ficou sem nada a ver. Valeu :D

Segue abaixo o meu código:

function Interpolar(imagem1, imagem2: TBitmap): TBitmap;
    var x, y: integer;
      Pixel, Pixel2, Pixel3: PByte;
      imagem3: TBitmap;
    begin
      imagem3 := TBitmap.Create;
      imagem3.LoadFromFile('x.bmp');
      for y := 0 to imagem1.Height - 1 do
      begin
        Pixel := imagem1.Scanline[y];
        Pixel2 := imagem2.Scanline[y];
        Pixel3 := imagem3.Scanline[y];
        for x := 0 to (imagem1.Width - 1) * 3 do
        begin
          Pixel3^ := round((Pixel^ + Pixel2^) / 2);
          inc(Pixel);
          inc(Pixel2);
          inc(Pixel3);
        end;

      end;
        //imagem3.Refresh;
      Result := imagem3;
    end;

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Veja se esta alteração no seu código faz o que você quer. Consiste em criar um novo bitmap e inicializá-lo com o conteúdo do primeiro bitmap. Isto faz com que seja alocado espaço correto para o bitmap sem ter que carregar um em branco (observe que considerei que image1 tem o tamanho da imagem final desejada). Caso você queira que ele fique com todos os pixels brancos, utilize Imagem1.Canvas.FillRect após o uso do Assign.

function Interpolar(imagem1, imagem2 :TBitMap): TBitmap;
var
  x, y: integer;
  Pixel, Pixel2, Pixel3: PByte;
begin
  Result := TBitmap.Create;
  Result.Assign(Imagem1);
  for y := 0 to imagem1.Height - 1 do
  begin
    Pixel := imagem1.Scanline[y];
    Pixel2 := imagem2.Scanline[y];
    Pixel3 := Result.Scanline[y];
    for x := 0 to (imagem1.Width - 1) * 3 do
    begin
      Pixel3^ := round((Pixel^ + Pixel2^) / 2);
      inc(Pixel);
      inc(Pixel2);
      inc(Pixel3);
    end;
  end;
end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...