Добавить растянутое изображение в ImageList в Delphi - PullRequest
4 голосов
/ 13 июля 2011

У меня есть таблица, содержащая изображение в поле изображения, и я собираюсь поместить их в список изображений.Вот код:

ImageList.Clear;
ItemsDts.First;
ImageBitmap:= TBitmap.Create;
try
  while not ItemsDts.Eof do
  begin
    if not ItemsDtsPicture.IsNull then
    begin
      ItemsDtsPicture.SaveToFile(TempFileBitmap);
      ImageBitmap.LoadFromFile(TempFileBitmap);
      ImageList.Add(ImageBitmap, nil);
    end;
    ItemsDts.Next;
  end;
finally
  ImageBitmap.Free;
end;

Но у меня есть некоторые проблемы для изображений с размером, отличным от размера ImageList.

Обновление: Моя проблема заключается в том, что при добавлении изображения больше, чем размер ImageList (32 *32), например, 100 * 150. Он неправильно отображается в компоненте, подключенном к ImageList (например, в ListView).Кажется, что добавленное изображение не растягивается, а обрезается.Я хочу, чтобы новое изображение растягивалось, как в редакторе ImageList.

1 Ответ

6 голосов
/ 13 июля 2011

Я не знаю, предоставляет ли ImageList свойство для автоматического растягивания изображения.Если кто-то не найдет встроенного, вы всегда можете растянуть изображение самостоятельно, прежде чем добавлять его в ImageList.И пока вы на этом, прекратите использовать файл на диске: используйте вместо него TMemoryStream.Примерно так:

var StretchedBMP: TBitmap;
    MS: TMemoryStream;

ImageList.Clear;
ItemsDts.First;
StretchedBMP := TBitmap.Create;
try

  // Prepare the stretched bmp's size
  StretchedBMP.Width := ImageList.Width;
  StretchedBMP.Height := ImageList.Height;

  // Prepare the memory stream
  MS := TMemoryStream.Create;
  try
    ImageBitmap:= TBitmap.Create;
    try
      while not ItemsDts.Eof do
      begin
        if not ItemsDtsPicture.IsNull then
        begin
          MS.Size := 0;
          ItemsDtsPicture.SaveToStream(MS);
          MS.Position := 0;
          ImageBitmap.LoadFromStream(MS);
          // Stretch the image
          StretchedBMP.Canvas.StretchDraw(Rect(0, 0, StretchedBmp.Width-1, StretchedBmp.Height-1), ImageBitmap);
          ImageList.Add(StretchedBmp, nil);
        end;
        ItemsDts.Next;
      end;
    finally MS.Free;
    end;
  finally StretchedBMP.Free;
  end;
finally
  ImageBitmap.Free;
end;

PS: я отредактировал твой код в окне браузера.Я не могу гарантировать, что он скомпилируется, но если этого не произойдет, это будет легко исправить.

...