Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Декомпресс JPEG в Bitmap


Автор: RedArrow 21.8.2003, 23:34
Имеется такая проблема: Загружаю в TImage JPEG-файл, потом необходимо скопировать его часть в другой TImage. В Дельфи имеется функция CopyRect, но она работает только с битмапом, т.е. прежде, чем копировать, необходимо исходное изображение перевести в битмап. Нашел функцию TJPEGImage.DIBNeeded, но она почему-то не хочет работать. Или я что неправильно делаю? Помогите, плиз!!!!! Очень нужно!!!

Автор: December 22.8.2003, 03:25
У TImage есть Canvas, который по определению битмап. С ним всё получится, попробуй через него.

Автор: <Spawn> 22.8.2003, 14:41
Переводить в битмап просто - TBitMap.Assign(JpegImage)

Автор: <Spawn> 22.8.2003, 10:49
А можно воспользоваться BltBit:
Код
BitBlt(Image2.Canvas.Handle,10,10,50,100,Image1.Canvas.Handle,0,0,SRCCOPY);

Автор: BoBaH 26.8.2003, 16:15
А еще можно так scrncap.pas
Код

unit ScrnCap;
interface
uses WinTypes, WinProcs, Forms, Classes, Graphics, Controls;

{ Копирует прямоугольную область экрана }
function CaptureScreenRect(ARect : TRect) : TBitmap;
{ Копирование всего экрана }
function CaptureScreen : TBitmap;
{ Копирование клиентской области формы или элемента }
function CaptureClientImage(Control : TControl) : TBitmap;
{ Копирование всей формы элемента }
function CaptureControlImage(Control : TControl) : TBitmap;

{===============================================================}
implementation
function GetSystemPalette : HPalette;
var PaletteSize  : integer;
   LogSize      : integer;
   LogPalette   : PLogPalette;
   DC           : HDC;
   Focus        : HWND;
begin
  result:=0;
  Focus:=GetFocus;
  DC:=GetDC(Focus);
  try
     PaletteSize:=GetDeviceCaps(DC, SIZEPALETTE);
     LogSize:=SizeOf(TLogPalette)+(PaletteSize-1)*SizeOf(TPaletteEntry);
     GetMem(LogPalette, LogSize);
     try
        with LogPalette^ do
        begin
           palVersion:=$0300;
           palNumEntries:=PaletteSize;
           GetSystemPaletteEntries(DC, 0, PaletteSize, palPalEntry);
        end;
        result:=CreatePalette(LogPalette^);
     finally
        FreeMem(LogPalette, LogSize);
    end;
  finally
     ReleaseDC(Focus, DC);
  end;
end;


function CaptureScreenRect(ARect : TRect) : TBitmap;
var ScreenDC : HDC;
begin
  Result:=TBitmap.Create;
  with result, ARect do
  begin
     Width:=Right-Left;
     Height:=Bottom-Top;
     ScreenDC:=GetDC(0);
     try
        BitBlt(Canvas.Handle, 0,0,Width,Height,ScreenDC, Left, Top, SRCCOPY );
     finally
        ReleaseDC(0, ScreenDC);
     end;
     Palette:=GetSystemPalette;
  end;
end;

function CaptureScreen : TBitmap;
begin
  with Screen do Result:=CaptureScreenRect(Rect(0,0,Width,Height));
end;

function CaptureClientImage(Control : TControl) : TBitmap;
begin
  with Control, Control.ClientOrigin do
  result:=CaptureScreenRect(Bounds(X,Y,ClientWidth,ClientHeight));
end;

function CaptureControlImage(Control : TControl) : TBitmap;
begin
  with Control do
  if Parent=Nil then result:=CaptureScreenRect(Bounds(Left,Top,Width,Height)) else
  with Parent.ClientToScreen(Point(Left, Top)) do
  result:=CaptureScreenRect(Bounds(X,Y,Width,Height));
end;

end.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)