Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi Jpeg resmin çözünürlüğünü değiştirmek
#17
(09-02-2022, Saat: 17:57)COMMANDX Adlı Kullanıcıdan Alıntı: Şu kodu bi deneyin
procedure ResizeBmp(Dest: TBitmap; const WMax, HMax: Word);
type
 pRGBArray = ^TRGBArray;
 TRGBArray = array[Word] of TRGBTriple;
var
 TBmp: TBitmap;
 DstGap: Integer;
 WNew, HNew: Integer;
 X, Y, T3: Integer;
 Z1, Z2, IZ2: Integer;
 W1, W2, W3, W4: Integer;
 XP, XP2, YP, YP2: Integer;
 SrcLine1, SrcLine2, DstLine: pRGBArray;
Begin
 TBmp := TBitmap.Create;
 try
   try
     WNew := (Dest.Width * HMax) div Dest.Height;
     HNew := (WMax * Dest.Height) div Dest.Width;
     if (WMax < WNew) then
     begin
       TBmp.Width := WMax;
       TBmp.Height := HNew;
     end else
     begin
       TBmp.Width := WNew;
       TBmp.Height := HMax;
     end;
     Dest.PixelFormat := pf24Bit;
     TBmp.PixelFormat := pf24bit;
     DstLine := TBmp.ScanLine[0];
     DstGap  := Integer(TBmp.ScanLine[1]) - Integer(DstLine);
     XP2 := MulDiv(Pred(Dest.Width), $10000, TBmp.Width);
     YP2 := MulDiv(Pred(Dest.Height), $10000, TBmp.Height);
     YP  := 0;
     for Y := 0 to Pred(TBmp.Height) do
     begin
       XP := 0;
       SrcLine1 := Dest.ScanLine[YP shr 16];
       if (YP shr 16 < Pred(Dest.Height))
         then SrcLine2 := Dest.ScanLine[Succ(YP shr 16)]
         else SrcLine2 := Dest.ScanLine[YP shr 16];
       Z2  := Succ(YP and $FFFF);
       IZ2 := Succ((not YP) and $FFFF);
       for X := 0 to Pred(TBmp.Width) do
       begin
         T3 := XP shr 16;
         Z1 := XP and $FFFF;
         W2 := MulDiv(Z1, IZ2, $10000);
         W1 := IZ2 - W2;
         W4 := MulDiv(Z1, Z2, $10000);
         W3 := Z2 - W4;
         DstLine[X].rgbtRed   := (SrcLine1[T3].rgbtRed   * W1 + SrcLine1[T3 + 1].rgbtRed   * W2 + SrcLine2[T3].rgbtRed   * W3 + SrcLine2[T3 + 1].rgbtRed   * W4) shr 16;
         DstLine[X].rgbtGreen := (SrcLine1[T3].rgbtGreen * W1 + SrcLine1[T3 + 1].rgbtGreen * W2 + SrcLine2[T3].rgbtGreen * W3 + SrcLine2[T3 + 1].rgbtGreen * W4) shr 16;
         DstLine[X].rgbtBlue  := (SrcLine1[T3].rgbtBlue  * W1 + SrcLine1[T3 + 1].rgbtBlue  * W2 + SrcLine2[T3].rgbtBlue  * W3 + SrcLine2[T3 + 1].rgbtBlue  * W4) shr 16;
         Inc(XP, XP2);
       end;
       Inc(YP, YP2);
       DstLine := pRGBArray(Integer(DstLine) + DstGap);
     end;
     Dest.Assign(TBmp);
   except
   end;
 finally
   TBmp.Free;
 end;
end;

Denemedim 
Kullanımı
resizebmp(image1.picture.bitmap,640,480)

veya... 


  
   

procedure TForm1.Button2Click(Sender: TObject);
var
 bmp: TBitmap;
 jpg: TJPEGImage;
 scale: Double;
 widthL, HeightL, pt1, pt2, pt3, pt4: integer;
 verdd : boolean;
begin
 if OpenDialog1.Execute then
 begin
 try
         jpg := TJPEGImage.Create;
         verdd := false;
         try
           //Dimensões
           widthL := 98;
           HeightL := 98;
           jpg.LoadFromFile(OpenDialog1.FileName);
           if (jpg.Height >= jpg.Width) AND (HeightL <= jpg.Height) then begin
             scale := widthL / jpg.Height;
           end else if (jpg.Height <= jpg.Width) AND (widthL <=  jpg.Width) then begin
             scale := HeightL / jpg.Width;
           end else begin
             verdd := true;
           end;
               bmp := TBitmap.Create;
               try
                 {Create thumbnail bitmap, keep pictures aspect ratio}
                 bmp.SetSize( widthL,HeightL);
                 if not verdd then begin
                     pt1 := (widthL - Round(jpg.Width * scale)) div 2;
                     pt2 := (HeightL - Round(jpg.Height * scale)) div 2;
                     pt3 := Round(jpg.Width * scale) + pt1;
                     pt4 := Round(jpg.Height * scale) + pt2;
                     bmp.Canvas.StretchDraw(Rect(pt1, pt2, pt3, pt4), jpg);
                 end else begin
                     pt1 := (widthL - jpg.Width) div 2;
                     pt2 := (HeightL - jpg.Height) div 2;
                     pt3 := jpg.Width + pt1;
                     pt4 := jpg.Height + pt2;
                     bmp.Canvas.StretchDraw(Rect(pt1, pt2, pt3, pt4), jpg);
                 end;

                 Logo.Picture.Assign(bmp);
                 {Convert back to JPEG and save to file}
                 jpg.Assign(bmp);
                 jpg.SaveToFile(ChangeFileExt(OpenDialog1.FileName, '_thumb.JPG'));
               finally
                 bmp.free;
               end;
         finally
           jpg.free;
         end;
 except
      showMessage('Erro ao carregar imagem');    ///////////////////////////////////
 end;
 end;
end;

veya

Title: 
How to get/set JPG resolution
procedure GetResJpg(JPGFile: string);
const
 BufferSize = 50;
var
 Buffer: string;
 Index: integer;
 FileStream: TFileStream;
 HorzRes, VertRes: Word;
 DP: Byte;
 Measure: string;
begin
 FileStream := TFileStream.Create(JPGFile,
   fmOpenReadWrite);
 try
   SetLength(Buffer, BufferSize);
   FileStream.Read(buffer[1], BufferSize);
   Index := Pos('JFIF' + #$00, buffer);
   if Index  0 then
   begin
     FileStream.Seek(Index + 6, soFromBeginning);
     FileStream.Read(DP, 1);
     case DP of
       1: Measure := 'DPI'; //Dots Per Inch
       2: Measure := 'DPC'; //Dots Per Cm.
     end;
     FileStream.Read(HorzRes, 2); // x axis
     HorzRes := Swap(HorzRes);
     FileStream.Read(VertRes, 2); // y axis
     VertRes := Swap(VertRes);
   end
 finally
   FileStream.Free;
 end;
end;

procedure SetResJpg(name: string; dpix, dpiy: Integer);
const
 BufferSize = 50;
 DPI = 1; //inch
 DPC = 2; //cm
var
 Buffer: string;
 index: INTEGER;
 FileStream: TFileStream;
 xResolution: WORD;
 yResolution: WORD;
 _type: Byte;
begin
 FileStream := TFileStream.Create(name,
   fmOpenReadWrite);
 try
   SetLength(Buffer, BufferSize);
   FileStream.Read(buffer[1], BufferSize);
   index := POS('JFIF' + #$00, buffer);
   if index  0
     then begin
     FileStream.Seek(index + 6, soFromBeginning);
     _type := DPI;
     FileStream.write(_type, 1);
     xresolution := swap(dpix);
     FileStream.write(xresolution, 2);
     yresolution := swap(dpiy);
     FileStream.write(yresolution, 2);
   end
 finally
   FileStream.Free;
 end;
end;

Hocam yapamadım size zahmet olmazsa proje olarakgöderebilirmisiniz
Cevapla


Bu Konudaki Yorumlar
Cvp: Delphi Jpeg resmin çözünürlüğünü değiştirmek - Yazar: Blacklord - 10-02-2022, Saat: 09:47

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  yapay zeka delphi kl007 9 661 26-02-2026, Saat: 09:12
Son Yorum: mrmarman
  Win 11 ve Delphi 7 Minimize sorunu. enigma 7 532 11-02-2026, Saat: 10:27
Son Yorum: RAD Coder
Question Delphi formunu nasıl otomatik tam ekran yapabilirim ? erdemklt0 2 352 23-01-2026, Saat: 10:02
Son Yorum: csunguray
  Delphi SLL kullanım sorunu Bay_Y 12 1.327 22-12-2025, Saat: 18:11
Son Yorum: Bay_Y
  Delphi ile SQL server bağlantı hatası yakalama Under 20 2.014 21-11-2025, Saat: 15:24
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi