Конференция "Media" » Почему процедура не работает при вызове во второй раз?
 
  • Gpol (30.11.11 21:58) [0]
    Процедура складывает битмапы bmpIn1 и bmpIn2 с учетом альфа канала из bmpIn2.

    А x1 и y1 это расположение bmpIn2 на bmpIn1.

    procedure BmpBlend(bmpIn1,bmpIn2:tbitmap; x1,y1: integer);
    type PRGBarray = ^TRGBarray;
        TRGBarray = array[0..30000] of TRGBQuad;
    var  x,y,w,h: integer;
        colorLine1,colorLine2 : pRGBarray;
        trfact:real;

    function byteSum(op1,op2:byte):byte;
    begin
    if (op1+op2)>255 then
    byteSum:=255 else
    byteSum:=op1+op2;
    end;

    Begin

    bmpin2.PixelFormat:=pf32bit;
    bmpin1.PixelFormat:=pf32bit;
    h:=bmpin2.Height; w:=bmpin2.Width;

    for x:=1 to w-1 do begin

      colorline1:=bmpin1.ScanLine[x+x1];
      colorline2:=bmpin2.ScanLine[x];

      for y := 1 to h-1 do  begin

         trfact:=colorline2[y].rgbReserved/255;

         colorline1[y+y1].rgbBlue:=byteSum(trunc(colorline1[y+y1].rgbBlue*trfact),
         trunc(colorline2[y].rgbBlue*(1-trfact)));

         colorline1[y+y1].rgbGreen:=byteSum(trunc(colorline1[y+y1].rgbGreen*trfact),
         trunc(colorline2[y].rgbGreen*(1-trfact)));

         colorline1[y+y1].rgbRed:=byteSum(trunc(colorline1[y+y1].rgbRed*trfact),
         trunc(colorline2[y].rgbRed*(1-trfact)));
      end;
    end;
    End;



    Так вот в при первом вызове процедуры все работает нормально. Но при втором и последующих вызовах ничего не происходит. Ума не приложу че за фигня
  • antonn © (30.11.11 23:18) [1]
    размер накладываемого битмапа с учетом смещения не вылезает за границы результирующего?
    в цикле стоит делать сначала цикл по Y, а потом по X, а сейчас там чехарда и потенциально - бага
  • Gpol (01.12.11 19:19) [2]

    > antonn ©   (30.11.11 23:18) [1]
    > размер накладываемого битмапа с учетом смещения не вылезает
    > за границы результирующего?в цикле стоит делать сначала
    > цикл по Y, а потом по X, а сейчас там чехарда и потенциально
    > - бага


    проблема с "вылезанием" меня не волнует
  • Андреевич (01.12.11 19:22) [3]
    а зря
  • Gpol (01.12.11 19:24) [4]

    > Андреевич   (01.12.11 19:22) [3]
    > а зря

    Я это сделаю потом, сейчас меня волнует не это. Неужели никто не поможет? почему во второй раз процедура не работает???
  • Андреевич (01.12.11 20:08) [5]
    цикл уже поправил?
  • Омлет © (01.12.11 22:19) [6]
    С таким кодом - не мудрено...
    Во-первых, преобразование к 32-битному изображению ты производишь уже в самой процедуре. Что окажется в 4 байте, как думаешь?
    Во-вторых, у тебя перепутаны x и y - для неквадратной картинки будет вылет.
    В-третьих, где код вызова процедуры? Где тестовый проект с изображениями, на которых не работает?
  • antonn © (01.12.11 22:59) [7]
    1 - если там было 32хбитное, то ничего не произойдет
  • Gpol (02.12.11 19:25) [8]
    вобщем я жестко лоханулся. Нужно было сделать image1.refresh;
    закрывайте
  • Андреевич (02.12.11 21:30) [9]
    на самом деле тебе нужно пересмотреть цикл, попробуй порисовать прямоугольную картинку
  • mulenrusch © (16.11.13 16:32) [10]
    http://originalparfum.ru/muzhskaya/cielo
    вобщем я жестко лоханулся. Нужно было сделать image1.refresh;
    закрывайте

    И как додумались об этом
  • OleGGa © (27.11.13 20:41) [11]
    Хз, че то ты накосячил лишку там
    _______________
    http://www.sport-russia.ru/Go/ViewProduct/id=28412
 
Конференция "Media" » Почему процедура не работает при вызове во второй раз?
Есть новые Нет новых   [134427   +38][b:0][p:0.001]