iyi geceler.
Databaseden aldığım fotoğrafların (jpeg) kenarlarını ovalleştirerek basmak istiyorum ama ne kullanmam gerektiğini bir türlü bulamadım. canvas.roundrect var yakın olarak ama onu da çizdirmeyi becerebildim fotoğrafta oynama yapamadım. Acil cevap verebilen olursa çok sevinirim.
Şimdiden teşekkürler...
jpeg oval kenar verme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: jpeg oval kenar verme
hiç kimsenin bu konuyla ilgili bi fikri yok mu? delphide bunun yapılamayacak olmasına inanmak istemiyorum..
Re: jpeg oval kenar verme
Üç aşamalı bir çözüm üretmek lazım.
- İlk aşama şablon olması açısından istenen şekli (kenarları oval) içeren bir resim üretmek.
- ikinci aşama satır satır bu şablonu scanline ile okuyarak şartlara uyan yani oval içerisine denk gelen renk ile güdümlenerek kaynak resimden hedef resim üretmek. Bu hedef ürün resim üretilirken de oval dışındaki kalan kısmı transparan olması için renk vermek.
- Sonra da TImage nesnesine geri yükleyerek transparan kısımların uygulamaya geçmesini sağlamak.
Aşağıdaki adımlar görsel olarak ne yapılması gerektiğini özetler diye değerlendiriyorum.
Orjinal Image:
Maske Image:
Ürün Image:
Başarılar.
- İlk aşama şablon olması açısından istenen şekli (kenarları oval) içeren bir resim üretmek.
- ikinci aşama satır satır bu şablonu scanline ile okuyarak şartlara uyan yani oval içerisine denk gelen renk ile güdümlenerek kaynak resimden hedef resim üretmek. Bu hedef ürün resim üretilirken de oval dışındaki kalan kısmı transparan olması için renk vermek.
- Sonra da TImage nesnesine geri yükleyerek transparan kısımların uygulamaya geçmesini sağlamak.
Aşağıdaki adımlar görsel olarak ne yapılması gerektiğini özetler diye değerlendiriyorum.
Orjinal Image:
Maske Image:
Ürün Image:
Başarılar.
Re: jpeg oval kenar verme
jpg resmini imageye alıyorsun zaten ondan sonra canvasın boyutları da belli.oval şekil çizen bi komut vardı tam bilmiyorum şuan onun içi boş olanı ile bruscopy diyerek alabilirsin.alren yazdı:hiç kimsenin bu konuyla ilgili bi fikri yok mu? delphide bunun yapılamayacak olmasına inanmak istemiyorum..
Re: jpeg oval kenar verme
Region larla halledebilirsin. CreateRoundRect
Regionlarla ilgili bölüm:
http://101.lv/learn/delphi/ch12.htm#Heading6
CreateRoundRectRgn:
http://msdn.microsoft.com/en-us/library ... s.85).aspx
CreateRoundRectRgn ile oval bir region yarat ve çizimini yaptıgın canvas için bu rgn i seç.
Regionlarla ilgili bölüm:
http://101.lv/learn/delphi/ch12.htm#Heading6
CreateRoundRectRgn:
http://msdn.microsoft.com/en-us/library ... s.85).aspx
CreateRoundRectRgn ile oval bir region yarat ve çizimini yaptıgın canvas için bu rgn i seç.
Kod: Tümünü seç
Rgn : HRGN;
....
Rgn := CreateRoundRectRgn(50, 50, 250, 250,10,10);
SelectClipRgn(Canvas.Handle, Rgn);
Canvas.Draw(0, 0, Bitmap); // canvas draw işlemleri
...
SelectClipRgn(Canvas.Handle,0); // region ı iptal etme için
Re: jpeg oval kenar verme
Hazırladığım procedure...
Kod: Tümünü seç
procedure OvalYap(Image: TImage; R: Integer);
type
TRGBArray = array[0..32767] of TRGBTriple;
pRGBArray = ^TRGBArray;
Const
clTransp = $111213; // transparent color
Var
Bitmap : TBitmap; // Orjinal Image...
MaskeBitmap : TBitmap; // Kenarı yuvarlak çerçeve (maske)...
HedefBitmap : TBitmap; // Ürün Image...
W,H,RW,RH:Integer;
X, Y : Integer;
sl1, sl2, sl3 : pRGBArray; // ScanLine için sl1 Orjinal, sl2 Maske, sl3 ürün...
begin
Bitmap := TBitmap.Create;
MaskeBitmap := TBitmap.Create;
HedefBitmap := TBitmap.Create;
Bitmap.Assign( Image.Picture.Graphic );
MaskeBitmap.TransparentColor := clTransp;
HedefBitmap.TransparentColor := clTransp;
MaskeBitmap.Width := Bitmap.Width;
MaskeBitmap.Height := Bitmap.Height;
HedefBitmap.Width := Bitmap.Width;
HedefBitmap.Height := Bitmap.Height;
// Oval altyapı hazırlıyoruz....
With MaskeBitmap, MaskeBitmap.Canvas do
begin
Pen.Color :=clRed;
Brush.Color :=clTransp;
FillRect(ClipRect);
RW := Width-1;
RH := Height-1;
W := Width *R Div 200;
H := Height*R Div 200;
Arc(0,0,2*W,2*H,W,0,0,H+1);
MoveTo(W,0);
LineTo(RW-W,0);
Arc(RW,0,RW-2*W,2*H,RW,H,RW-W-1,0);
MoveTo(RW,H);
LineTo(RW,RH-H);
Arc(RW,RH-2*H,RW-2*W,RH,RW-W,RH,RW,RH-H-1);
MoveTo(W,RH);
LineTo(RW-W,RH);
Arc(0,RH,2*W,RH-2*H,0,RH-H,W+2,RH);
MoveTo(0,H);
LineTo(0,RH-H);
Brush.Color := clWhite;
FloodFill(RW Div 2, RH Div 2,clRed, fsBorder);
end;
// İşleme başlıyoruz...
Bitmap.PixelFormat := pf24Bit;
MaskeBitmap.PixelFormat := pf24Bit;
HedefBitmap.PixelFormat := pf24Bit;
for y := 0 to MaskeBitmap.Height-1 do begin
sl1 := MaskeBitmap.ScanLine[ y ]; // maskenin satırını okuduk...
sl2 := Bitmap.ScanLine[ y ]; // kaynak/referans bitmap satırını okuduk...
sl3 := HedefBitmap.ScanLine[ y ]; // üzerinde oynama yapılacak satırı aldık...
for x := 0 to MaskeBitmap.Width - 1 do begin
if sl1[x].rgbtRed = 255 then
begin
sl3[x].rgbtRed := sl2[x].rgbtRed;
sl3[x].rgbtGreen := sl2[x].rgbtGreen;
sl3[x].rgbtBlue := sl2[x].rgbtBlue;
end else
begin
sl3[x].rgbtRed := sl1[x].rgbtRed;
sl3[x].rgbtGreen := sl1[x].rgbtGreen;
sl3[x].rgbtBlue := sl1[x].rgbtBlue;
end;
end;
end;
Image.Picture.Bitmap.Assign(HedefBitmap);
Image.Transparent := True;
Bitmap.Free;
MaskeBitmap.Free;
HedefBitmap.Free;
end;
Kod: Tümünü seç
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
OvalYap( Image1, 30 );
end;
- Dosya ekleri
-
- ImageRoundedRect.rar
- Oval Image Projesi
- (220.51 KiB) 89 kere indirildi
Re: jpeg oval kenar verme
ovalleştirmeden sonra fotoğrafı Kaydettiğimizde köşedeki kırpılan kısımlar siyah geliyor o kısımları beyaz yapma imkanımız varmı?