Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.05.29;
Скачать: [xml.tar.bz2];

Вниз

BMP в массив и обратно   Найти похожие ветки 

 
Неважно   (2011-02-17 16:56) [0]

Добрый. Пардон, но где-то туплю. Где? Пока понять не могу.

Код:

procedure GetImage(const BMP: TBitmap; Image: array of byte);
var i, x, y: Integer;
   ptr: PByteArray;
begin
 i := 0;
 for y := 0 to BMP.Height - 1 do
 begin
   ptr := PByteArray(BMP.ScanLine[y]);
   for x := 0 to BMP.Width*3 - 1 do
   begin
     Image[i] := byte(ptr[x]);
     Inc(i);
   end;
 end;
end;

procedure SetImage(BMP: TBitmap; const Image: array of byte);
var i, x, y: Integer;
 ptr: PByteArray;
begin
 i := 0;
 for y := 0 to BMP.Height - 1 do
 begin
   ptr := PByteArray(BMP.ScanLine[y]);
   for x := 0 to BMP.Width*3 - 1 do
   begin
     ptr[x] := Image[i];
     Inc(i);
   end;
 end;
end;

procedure TForm1.Button3Click(Sender: TObject);
 var Bitmap,NewBitmap:TBitmap;
 sr: array of Byte;
begin
 Bitmap:=TBitmap.Create;
 try
   Bitmap.Assign(Image1.Picture);
   SetLength(sr,Bitmap.Width*Bitmap.Height*3);
   GetImage(Bitmap,sr);
   //
   NewBitmap:=TBitmap.Create;
   try
     NewBitmap.Height:=Bitmap.Height;
     NewBitmap.Width:=Bitmap.Width;
     SetImage(NewBitmap,sr);
     Image2.Picture.Assign(NewBitmap);
   finally
     NewBitmap.Free;
   end;
 finally
   Bitmap.Free;
 end;
end;



 
RWolf ©   (2011-02-17 17:19) [1]

bmp.SaveToStream не устроит?


 
Неважно   (2011-02-17 17:44) [2]

Устроит что угодно, что переводит в массив и обратно.

В Вашем случаи, по каким-то причинам, размер массива увеличен. Т.е. если получить массив по коду выше и по Вашему варианту, то имеем разные массивы.


var M:TMemoryStream;
begin
 M:=TMemoryStream.Create;
 try
   Image1.Picture.Bitmap.SaveToStream(M);
   Memo1.Lines.Add(IntToStr( M.Size  ));
 finally
   M.Free;
 end;
end;


 
clickmaker ©   (2011-02-17 17:45) [3]

> по каким-то причинам, размер массива увеличен

потому что сохраняется всё: изображение + заголовок


 
icWasya ©   (2011-02-17 17:47) [4]

Ваш код предполагает, что PixelFormat = pf24bit.
А это может быть не такж


 
Неважно   (2011-02-17 17:52) [5]

2 clickmaker ©   (17.02.11 17:45) [3]
Так а что делать? Я не вижу и не знаю решения.


2 icWasya ©   (17.02.11 17:47) [4]

> Ваш код предполагает, что PixelFormat = pf24bit.


Думал над этим. Не помогает.

var Bitmap,NewBitmap:TBitmap;
 sr: array of Byte;
begin
 Bitmap:=TBitmap.Create;
 try
   Bitmap.Assign(Image1.Picture);
   Bitmap.PixelFormat:=pf24bit;
   SetLength(sr,Bitmap.Width*Bitmap.Height*3);
   GetImage(Bitmap,sr);
   //
   NewBitmap:=TBitmap.Create;
   try
     NewBitmap.Height:=Bitmap.Height;
     NewBitmap.Width:=Bitmap.Width;
     NewBitmap.PixelFormat:=pf24bit;
     SetImage(NewBitmap,sr);
     Image2.Picture.Assign(NewBitmap);
   finally
     NewBitmap.Free;
   end;
 finally
   Bitmap.Free;
 end;
end;


 
RWolf ©   (2011-02-17 17:56) [6]


> Неважно   (17.02.11 17:44) [2]

Мой телепатор подсказывает, что в рассматриваемой задаче важно, чтобы картинка могла сохраняться (bmp.SaveToStream), а потом загружаться из сохранённого (bmp.LoadFromStream), а размер получаемых данных — дело десятое.


 
Неважно   (2011-02-17 18:03) [7]

Я, вроде как, задачу озвучил.
Повторюсь:
1) преобразовать BMP в массив;
2) работать с массивом. фильтры всякие
3) преобразовать из массива в BMP

В случаи с SaveToStream массив у меня, по каким-то причинам, больше нужного. Толку-то с ним работать, если он не тот. Может я его не правильно получаю? Может таки можно выделить просто данные без заголовк?


 
RWolf ©   (2011-02-17 18:06) [8]

Вполне себе тот; просто полезные данные предваряются заголовком BMP (TBitmapFileHeader).


 
RWolf ©   (2011-02-17 18:08) [9]


> RWolf ©   (17.02.11 18:06) [8]

то есть, заголовком и палитрой цветов.


 
Неважно   (2011-02-17 18:19) [10]

Это всё хорошо, но как это сделать мне неведомо. Вот в этом и проблема.


 
clickmaker ©   (2011-02-17 18:25) [11]

> 2) работать с массивом. фильтры всякие

GetDIBits()



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.05.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.003 c
2-1297928446
Andrey10
2011-02-17 10:40
2011.05.29
вопрос по бд


15-1297421234
Учусь
2011-02-11 13:47
2011.05.29
приведение типов в сях


15-1297334599
Tonick2001
2011-02-10 13:43
2011.05.29
SQL ip to number


15-1297459801
Юрий
2011-02-12 00:30
2011.05.29
С днем рождения ! 12 февраля 2011 суббота


10-1169119535
Brenagwynn
2007-01-18 14:25
2011.05.29
сервис и COM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский