|
#1
|
|||
|
|||
постеризация
Как можно сделать постеризацию изображения?нашел вот такой компоненет TOrImage,есть какие нибудь альтернативные пути?
|
#2
|
||||
|
||||
Этот компонент идёт с исходным кодом, "выдерни" нужную часть.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
|||
|
|||
там слишком сложный для меня код,не могу понять где постеризация
|
#4
|
|||
|
|||
ImageEn,G32/Graphics32/ImageVampire посоветовали также,что скажете про них?есть ли их исходные коды?может быть они попроще?
|
#5
|
||||
|
||||
Вот кусок из исходников:
Код:
if (FPictureOriginal.Graphic <> nil) and (FPicture.Graphic <> nil) then if (FPictureOriginal.Graphic is TBitmap) and (FPicture.Graphic is TBitmap) then begin ... // for each row of pixels for I := 0 to BmpOriginal.Height - 1 do begin OrigRow := BmpOriginal.ScanLine[i]; DestRow := FPicture.Bitmap.ScanLine[i]; if FNoise <> nil then NoiseRow := FNoise.ScanLine[i] else NoiseRow := OrigRow; // for each pixel in row for j := 0 to BmpOriginal.Width - 1 do begin RO:=OrigRow[j].rgbtRed; GO:=OrigRow[j].rgbtGreen; BO:=OrigRow[j].rgbtBlue; //Calculate Posterize or Solorize if FPosterize<>0 then begin RO:=round(RO/FPosterize)*FPosterize; GO:=round(GO/FPosterize)*FPosterize; BO:=round(BO/FPosterize)*FPosterize; end ... Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#6
|
|||
|
|||
подскажите в чем дело,вот рабочий код
Код:
procedure TForm1.Button8Click(Sender: TObject); var i,j:integer; begin if (OpenPictureDialog1.Execute) and FileExists(OpenPictureDialog1.FileName) then begin bp:=TBitmap.Create; if copy(form1.OpenPictureDialog1.FileName,length(form1.OpenPictureDialog1.FileName)-2,3)='bmp' then bp.LoadFromFile(form1.OpenPictureDialog1.FileName) else begin bpj:=TJPEGImage.Create; bpj.LoadFromFile(form1.OpenPictureDialog1.FileName); bp.Assign(bpj); bpj.Free; end; end; SetLength(pic,bp.Width,bp.Height); for i:=0 to bp.Width-1 do for j:=0 to bp.Height-1 do pic[i,j]:=bp.Canvas.Pixels[i,j]; for i:=0 to bp.Width-1 do for j:=0 to bp.Height-1 do begin r:=getrvalue(pic[i,j]); g:=getgvalue(pic[i,j]); b:=getbvalue(pic[i,j]); r:=round(r/(255/5))*round(255/5); g:=round(g/(255/5))*round(255/5); b:=round(b/(255/5))*round(255/5); pic[i,j]:=(b*65536)+(g*256)+r end; for j:=0 to bp.Height-1 do for i:=0 to bp.Width-1 do bp.Canvas.Pixels[i,j]:=pic[i,j]; bp.SaveToFile(home+'itog.bmp'); bp.Free; если ставлю в функцию значение 4 (самое нужное мне) не работает если ставлю любое другое 3 5 6 7 8 9 10 всё работает) Код:
r:=round(r/(255/4))*round(255/4); g:=round(g/(255/4))*round(255/4); b:=round(b/(255/4))*round(255/4); |
#7
|
||||
|
||||
Особо разбираться лень, но в этом коде нужно добавить проверку:
Код:
R := Round(R / (255 / 4)) * Round(255 / 4); G := Round(G / (255 / 4)) * Round(255 / 4); B := Round(B / (255 / 4)) * Round(255 / 4); if R < 0 then R := 0; if G < 0 then G := 0; if B < 0 then b := 0; if R > 255 then R := 255; if G > 255 then G := 255; if B > 255 then B := 255; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |