Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
Вниз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 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c