| 
| 
 | Вопрос # 639/ вопрос решён / | 
 |  Здравствуйте, уважаемые эксперты!Я наверно достал всех со своим графическим редактором.Но мне надо добавить на панель инструментов лупу которая увеличивает рисунок и наоборот уменьшает но не с помощью оператаров strech и proportional как мне это сделать? 
|  |   Вопрос задал: Аксион (статус: 4-ый класс)Вопрос отправлен: 18 июня 2007, 13:07
 Состояние вопроса: решён, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Градов Ю.М. Здравствуйте, ММО!Высылаю Вам часть кода, вспомогательный код могу выслать, если необходимо:
 Приложение:Переключить в обычный режим var  Srect, Drect, PosForme: TRect;  iWidth, iHeight, DmX, DmY: Integer;  iTmpX, iTmpY: Real;  C: TCanvas;  Kursor: TPoint; ... if not IsIconic(Application.Handle) thenbegin  GetCursorPos(Kursor);  PosForme := Rect(Form1.Left, Form1.Top, Form1.Left + Form1.Width, Form1.Top + Form1.Height);  if not PtInRect(PosForme, Kursor) then  begin    iWidth := Image1.Width;    iHeight := Image1.Height;    Drect := Bounds(0, 0, iWidth, iHeight);    iTmpX := iWidth / (Slider.Position * 4);    iTmpY := iHeight / (Slider.Position * 4);    Srect:=    Rect(Kursor.x, Kursor.y, Kursor.x, Kursor.y);    InflateRect(Srect, Round(iTmpX),  Round(iTmpY));    C := TCanvas.Create;    try      C.Handle := GetDC(GetDesktopWindow);      Image1.Canvas.CopyRect(Drect, C, Srect);    finally      C.Free;    end;  end;  Windows.Application.ProcessMessages;end; 
|  | Ответ отправил: Градов Ю.М. (статус: 8-ой класс)Время отправки: 18 июня 2007, 22:00
 Оценка за ответ: 5
 |  Ответ #2. Отвечает эксперт: min@y™ Скачай себе базу знаний Delphi World (ещё раз советую). Там много интересного. Вот, к примеру, я там нашёл такую вещь (см. приложение): Приложение:Переключить в обычный режим { This function resizes a bitmap calculating the average color of a rectangular area of pixels from source bitmap to a pixel or a rectangular area to target bitmap.  It produces a soft-color and undistorsioned result image unlike the StretchDraw method  I think that this method have a tenichal name, but I am not sure.  As you can see, this function could be very optimized :p }  procedure TFormConvertir.ResizeBitmap(imgo, imgd: TBitmap; nw, nh: Integer); var   xini, xfi, yini, yfi, saltx, salty: single;   x, y, px, py, tpix: integer;   PixelColor: TColor;   r, g, b: longint;    function MyRound(const X: Double): Integer;   begin     Result := Trunc(x);     if Frac(x) >= 0.5 then       if x >= 0 then Result := Result + 1       else         Result := Result - 1;     // Result := Trunc(X + (-2 * Ord(X < 0) + 1) * 0.5);   end;  begin   // Set target size    imgd.Width  := nw;   imgd.Height := nh;    // Calcs width & height of every area of pixels of the source bitmap    saltx := imgo.Width / nw;   salty := imgo.Height / nh;     yfi := 0;   for y := 0 to nh - 1 do   begin     // Set the initial and final Y coordinate of a pixel area      yini := yfi;     yfi  := yini + salty;     if yfi >= imgo.Height then yfi := imgo.Height - 1;      xfi := 0;     for x := 0 to nw - 1 do     begin       // Set the inital and final X coordinate of a pixel area        xini := xfi;       xfi  := xini + saltx;       if xfi >= imgo.Width then xfi := imgo.Width - 1;         // This loop calcs del average result color of a pixel area       // of the imaginary grid        r := 0;       g := 0;       b := 0;       tpix := 0;        for py := MyRound(yini) to MyRound(yfi) do       begin         for px := MyRound(xini) to MyRound(xfi) do         begin           Inc(tpix);           PixelColor := ColorToRGB(imgo.Canvas.Pixels[px, py]);           r := r + GetRValue(PixelColor);           g := g + GetGValue(PixelColor);           b := b + GetBValue(PixelColor);         end;       end;        // Draws the result pixel        imgd.Canvas.Pixels[x, y] :=         rgb(MyRound(r / tpix),         MyRound(g / tpix),         MyRound(b / tpix)         );     end;   end; end; 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 19 июня 2007, 08:14
 Оценка за ответ: 5
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 19 июня 2007, 12:41; участников в обсуждении: 4. 
|   | Venom (статус: 1-ый класс), 18 июня 2007, 14:17 [#1]:Если интересно, могу скинуть полностью готовый год для масштабирования изображения: 1. Увеличение/уменьшение по клику на n%
 2. Увеличение/уменьшение выделенной области с центрированием области.
 
 Но там я использовал strech
 |  
|   | Аксион (статус: 4-ый класс), 18 июня 2007, 18:24 [#2]:Скинь |  
|   | Аксион (статус: 4-ый класс), 18 июня 2007, 18:33 [#3]:просто мне надо на увеличинном изображении рисовать а используя метод strech сами пиксели как бы растягиваются и рисовать не возможно, но в принцепи можешь скинуть вот мой емаил: mik43fe@yandex.ru |  
|   | Градов Ю.М. (статус: 8-ой класс), 18 июня 2007, 22:04 [#4]:Исходник можно взять здесь Link |  
|   | Аксион (статус: 4-ый класс), 19 июня 2007, 12:34 [#5]:а ГДЕ ДОСТАТЬ базу знаний Delphi World  ?? |  
|   | Градов Ю.М. (статус: 8-ой класс), 19 июня 2007, 12:41 [#7]:На сайте Link есть программа DelphiWorld6. Установить ее. В ней есть режим обновления баз данных. |  31 января 2011, 19:27: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |