[Решено] Заполнение TBitMap из массива байт
Модератор: Модераторы
[Решено] Заполнение TBitMap из массива байт
Ну то есть допустим, есть у меня массив, заполненный данными самой пиксельной матрицы в определенном формате, как мне заполнить из него TBitMap, чтобы потом отобразить, например, его на TImage?
В этом я совсем ничего не понимаю.
Единственная мысль у меня - заполнить в памяти массив 1 в 1 копирующий содержимое bmp-файла.
В этом я совсем ничего не понимаю.
Единственная мысль у меня - заполнить в памяти массив 1 в 1 копирующий содержимое bmp-файла.
Последний раз редактировалось kotompazb 05.11.2015 10:03:45, всего редактировалось 1 раз.
Используй TBitmap.RawImage.Data
Формат зависит от платформы(ОС).
Формат зависит от платформы(ОС).
Всем спасибо.
Может это и костыли, но учитывая, что размеры картинок и глубина цвета (bpp) в моем случае всегда одна и та же, я просто заполняю, как и написал ниже, bmp, сохраняю его в MemoryStream, а потом загружаю его оттуда. Думаю, так должно работать везде.
Щас еще хочу поковырять форматы png и gif, дабы реализовать возможность сохранения в них полученной картинки.
Может это и костыли, но учитывая, что размеры картинок и глубина цвета (bpp) в моем случае всегда одна и та же, я просто заполняю, как и написал ниже, bmp, сохраняю его в MemoryStream, а потом загружаю его оттуда. Думаю, так должно работать везде.
Щас еще хочу поковырять форматы png и gif, дабы реализовать возможность сохранения в них полученной картинки.
kotompazb писал(а):Щас еще хочу поковырять форматы png и gif, дабы реализовать возможность сохранения в них полученной картинки.
Разве так не работает?
Код: Выделить всё
pngImage.Assign(Bitmap);
Mikhail писал(а):Разве так не работает?Код: Выделить всё
pngImage.Assign(Bitmap);
О! Спасибо:)
Был не в курсе. Еще не пробовал.
Добавлено спустя 6 часов 19 минут 35 секунд:
Mikhail писал(а):kotompazb писал(а):Щас еще хочу поковырять форматы png и gif, дабы реализовать возможность сохранения в них полученной картинки.
Разве так не работает?Код: Выделить всё
pngImage.Assign(Bitmap);
А с гифом, я так понял, так не прокатит - read only - жаль.
Всем спасибо.
Оффтоп:
Я так понял на форуме принято править заголовок темы, добавляя "[Решено]"? Это просто, надо отредактировать заголовок первого поста темы, так?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
kotompazb писал(а):Я так понял на форуме принято править заголовок темы, добавляя "[Решено]"?
Это принято не только на этом форуме.
Ну ок. Вечером пройдусь по своим темам.
Вот рабочий пример.
Код: Выделить всё
Function DrawBMPButton(Const BMPType: String): TBitmap;
Const
BMPPos=0;
Var
Marker: Cardinal;
MS, BS: TMemoryStream;
Begin
MS:=TMemoryStream.Create;
If CompareString(BMPType, 'find') Then
MS.Write(FindBMP, Length(FindBMP));
If CompareString(BMPType, 'FindCurrCell') Then
MS.Write(FindCurrCellBMP, Length(FindCurrCellBMP));
If CompareString(BMPType, 'ClearAllFind') Then
MS.Write(FindCurrCellBMP_Neg, Length(FindCurrCellBMP_Neg));
If CompareString(BMPType, 'print') Then
MS.Write(PrintBMP, Length(PrintBMP));
If CompareString(BMPType, 'structure') Then
MS.Write(StructBMP, Length(StructBMP));
If CompareString(BMPType, 'esc') Then
MS.Write(Esc, Length(Esc));
If CompareString(BMPType, 'bookmark') Then
MS.Write(Bitmap_BookMark, Length(Bitmap_BookMark));
If CompareString(BMPType, 'load') Then
MS.Write(Bitmap_Load, Length(Bitmap_Load));
If CompareString(BMPType, 'save') Then
MS.Write(Bitmap_Save, Length(Bitmap_Save));
If CompareString(BMPType, 'clear') Then
MS.Write(Bitmap_Clear, Length(Bitmap_Clear));
If CompareString(BMPType, 'cancel') Then
MS.Write(Bitmap_X, Length(Bitmap_X));
If CompareString(BMPType, 'FormDotActive') Then
MS.Write(FormDotActive, Length(FormDotActive));
If CompareString(BMPType, 'FormDotInactive') Then
MS.Write(FormDotInactive, Length(FormDotInactive));
If CompareString(BMPType, 'cut') Then
MS.Write(Bitmap_Cut, Length(Bitmap_Cut));
If CompareString(BMPType, 'copy') Then
MS.Write(Bitmap_Copy, Length(Bitmap_Copy));
If CompareString(BMPType, 'paste') Then
MS.Write(Bitmap_Paste, Length(Bitmap_Paste));
If CompareString(BMPType, 'undo') Then
MS.Write(Bitmap_Undo, Length(Bitmap_Undo));
If CompareString(BMPType, 'edit') Then
MS.Write(Bitmap_Pen, Length(Bitmap_Pen));
If CompareString(BMPType, 'new') or CompareString(BMPType, 'append') Then
MS.Write(Bitmap_New, Length(Bitmap_New));
If CompareString(BMPType, 'tools') Then
MS.Write(Tools16, Length(Tools16));
If CompareString(BMPType, 'Cancel') or CompareString(BMPType, 'CancelClose') Then
MS.Write(Bitmap_Cancel, Length(Bitmap_Cancel));
If CompareString(BMPType, 'Post') or CompareString(BMPType, 'PostClose') Then
MS.Write(Bitmap_Post, Length(Bitmap_Post));
If CompareString(BMPType, 'logo') Then
MS.Write(DCLbmp, Length(DCLbmp));
If CompareString(BMPType, 'logo_small') Then
MS.Write(DCLbmp, Length(DCLbmp_Small));
If MS.Size>0 Then
Begin
Marker:=0;
MS.Position:=0;
MS.Read(Marker, 3);
If Marker=PAGSignature Then // PAG Signature
Begin
// Compressed BMP/
BS:=TMemoryStream.Create;
BS.Position:=0;
DecompressProc(MS, BS);
BS.Position:=0;
MS.Position:=0;
MS.CopyFrom(BS, BS.Size);
FreeAndNil(BS);
End;
Result:=TBitmap.Create;
MS.Position:=BMPPos;
Result.LoadFromStream(MS);
Result.TransparentColor:=Result.Canvas.Pixels[0, 0];
Result.TransparentMode:=tmFixed; // tmAuto;
Result.Transparent:=True;
End
Else
Result:=TBitmap.Create;
FreeAndNil(MS);
End;
