Вниз
Скачать: CL | DM;

PNG в Delphi   Найти похожие ветки 

← →
danila_master ©   (2007-02-21 22:28) [0]

Всем првет,
может кто подскажет, как png файл загнать в динамический массив? (например в array of real)


← →
Dmitrij_K   (2007-02-21 22:58) [1]

Чего? Модет опишешь проблему подругому. Как связан рисунок и массив чисел?


← →
danila_master ©   (2007-02-21 23:10) [2]

Ну как я понимаю,
во-первых: надо вообще загрузить png  в delphi.
во-вторых: как я понимаю загрузить битовую карту в массив.
Если я в чем-то ошибаюсь, то исправьте меня.


← →
Efir ©   (2007-02-21 23:40) [3]

Используй какокй нить компонент, напр. TPNGImage. Грузишь, переводишь в TBitmap, а далее можно так:

var
 mas:array of array of byte;
 pix:TByteArray;
 Image:TBitmap;

SetLength(mas,Image.Width*n,Image.Height*n);
for y:=0 to Height-1 do begin
 pix:=Image.ScanLine[y];
 for x:=0 to Width-1 do mas[x,y]:=pix[x];
end;

где n - битность изображения (от1 до 3)


← →
Danila_master ©   (2007-02-22 10:48) [4]

А это где такой компонент взять?
Или это надо самому его писать?
Или может каки-нить библиотеки подключить?


← →
Dmitrij_K   (2007-02-22 11:54) [5]


> А это где такой компонент взять?

google.com


← →
Danila_master ©   (2007-02-22 12:11) [6]

Спасибо скачал, буду разбираться.
А кто подскажет как можно сделать обратную процедуру из массива в bmp или Image, для проверки?


← →
Efir ©   (2007-02-22 12:39) [7]

Тоже, как в [3], только вместо mas[x,y]:=pix[x] надо pix[x]:=mas[x,y]


← →
Danila_master ©   (2007-02-22 12:51) [8]

Не понял, а как с PByteArray вывести в bmp или Image?


← →
Efir ©   (2007-02-22 13:01) [9]

Ну написал же. Создаёшь свой битмап нужного размера

Image:=TBitmap.Create;
Image.PixelFirmat:=нужный тебе
Image.Width:=W;
Image.Height:=H;

Кидаешь на него указатель на нужную строчку  (pix:=Image.ScanLine[y]) и заполняешь.

for y:=0 to H-1 do begin
pix:=Image.ScanLine[y];
for x:=0 to W-1 do pix[x]:=mas[x,y];
end;


← →
Danila_master ©   (2007-02-22 13:50) [10]

Большое спасибо, все получилось.


← →
Danila_master ©   (2007-02-22 15:21) [11]

помогите опять проблемка, точнее все таже самая.
Написл такой код:
var
 x,y : integer;
 bmp, bmp2 : TBitmap;
 png: TPNGObject;

 mas:array of array of byte;
 pix : PByteArray;
begin
 bmp := TBitmap.create;
 bmp2 := TBitmap.create;
 png := TPNGObject.create;
 try
   png.LoadFromFile("_img.png");
   bmp.Assign(png);
   bmp2.PixelFormat:=pf24bit;
   bmp2.Width:=bmp.Width;
   bmp2.Height:=bmp.Height;

   Image1.Picture.Bitmap := bmp;

   SetLength(mas,bmp.Width,bmp.Height);
   for y:=0 to bmp.Height-1 do
   begin
      pix:=bmp.ScanLine[y];
      for x:=0 to bmp.Width-1 do mas[x,y]:=pix[x];
   end;
   for y:=0 to bmp2.Height-1 do begin
     pix:=bmp2.ScanLine[y];
     for x:=0 to bmp2.Width-1 do pix[x]:=mas[x,y];
   end;
   Image2.Picture.Bitmap := bmp2;
 finally
   bmp.free;
   bmp2.free;
 end;
end;

все работает, только картинку не полностью рисует, изменил byte на word и PByteArray на PWordArray, стал рисовать больше, но все равно не все. Размер картинки 512х512. Как сделать, что бы она полностью выводилась?


← →
Efir ©   (2007-02-22 16:33) [12]

Не забывай про кол-во бит на пиксель. Ведь при RGB у тебя 3 компоненты, следовательно и ширину массива byte умножай на три. Т.е.:

SetLength(mas,bmp.Width*3,bmp.Height);

for y:=0 to bmp.Heigth-1 do begin
 pix:=bmp.ScanLine[y];
 for x:=0 to bmp.Width*3-1 do ...
end;

А для RGB можно и так:

type
 RGB = record
   B,G,R:byte;
 end;

var
 pix:^RGB;

for y:=0 to bmp.Heigth-1 do begin
 pix:=bmp.ScanLine[y];
 for x:=0 to bmp.Width-1 do begin
   pix^.R:=...
   pix^.G:=...
   pix^.B:=...
   inc(pix);
 end;
end;


← →
Danila_master ©   (2007-02-22 16:49) [13]

Большое спасибо. все получилось.



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.026 c
3-1166422900
Tex
2006-12-18 09:21
2007.03.18
Изменение цвета текущей строки DBGrid a


15-1170999818
MBo
2007-02-09 08:43
2007.03.18
Пятничные задачки. Вася Пупкин потрясает интеллектом...


15-1171963690
Ega23
2007-02-20 12:28
2007.03.18
Народ! Для прикола нужна иконка танка


15-1172304466
ПЛОВ
2007-02-24 11:07
2007.03.18
Помогите с оценкой)


3-1166470607
школьник :-)
2006-12-18 22:36
2007.03.18
Коннект к базе MS SQL




   Наверх