Вызываем функцию Windows API для формирования BitMap:
SetBitmapBits(Image1.Picture.Bitmap.Handle, sizeof(TestArray), @TestArray);
Image1.Refresh; {для того, чтобы изменения отобразились}
Однако, если вы используете свою палитру, то ее нужно создать
Here is the translation of the content into Russian:
Делфи-программирование!
Показать 2D-массив как изображение в Delphi - это правильный путь. Однако, есть несколько проблем с вашим кодом.
Сначала SetBitmapBits ожидает указатель на буфер, содержащий данные о битмапе, а не массив байтов. Вторично, вам нужно создать палитру, если вы хотите использовать пользовательскую таблицу цветов.
Вот модифицированная версия вашего кода, которая должна работать:
// Создайте палитру с 256-ю записями (одной для каждого возможного цвета)
var
Palette: TColorPalette;
begin
Palette := TColorPalette.Create;
try
// Инициализируйте палитру черными и белыми цветами
FillChar(Palette, SizeOf(TColorPalette), 0);
Palette.pPaletteEntries[0].rgbRed := 255; // Белый
Palette.pPaletteEntries[1].rgbRed := 0; // Черный
// Создайте битмап с 128x128 пикселями
Image1.Picture.Bitmap.Width := 128;
Image1.Picture.Bitmap.Height := 128;
// Преобразуйте 2D-массив в указатель на буфер, содержащий данные о битмапе
var
Buffer: Pointer;
begin
Buffer := AllocMem(Image1.Picture.Bitmap.Width * Image1.Picture.Bitmap.Height);
try
// Скопируйте 2D-массив в буфер
for i := 0 to Image1.Picture.Bitmap.Height - 1 do
for j := 0 to Image1.Picture.Bitmap.Width - 1 do
Buffer[i * Image1.Picture.Bitmap.Width + j] := TestArray[i, j];
// Установите данные о битмапе с помощью буфера и палитры
SetBitmapBits(Image1.Picture.Bitmap.Handle, Image1.Picture.Bitmap.Width * Image1.Picture.Bitmap.Height, Buffer);
finally
FreeMem(Buffer);
end;
end;
// Обновите изображение для отображения изменений
Image1.Refresh;
finally
Palette.Free;
end;
end;
В этом коде мы создаем объект TColorPalette и инициализируем его черными и белыми цветами. Затем преобразуем 2D-массив в указатель на буфер, содержащий данные о битмапе с помощью AllocMem. Наконец, устанавливаем данные о битмапе с помощью SetBitmapBits и обновляем изображение для отображения изменений.
Обратите внимание, что этот код предполагает, что ваш 2D-массив содержит значения пикселей в диапазоне от 0 до 255, где 0 представляет черный цвет, а 255 - белый. Если ваш массив содержит другие значения, вам нужно будет изменить палитру соответствующим образом.
В статье описывается способ поместить двумерный массив в Image с помощью функции Windows API SetBitmapBits и формирования BitMap размером 128x128 точек.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.