Есть GIF-файл, в нем рисунок с прозрачным фоном. Нужно изменить размеры рисунка так чтобы фон остался прозрачным и сохранить его...
Никто не знает решения проблемы?
Модератор: gaidar
Dim Spr As New SR2D_Sprite
Spr.LoadFromFile App.Path & "\in.gif", , NewWidth, NewHeight
Spr.SaveToFile App.Path & "\out.png", FF_ARGB_PNG
я добавил тип FF_ARGB_GIF
и тут в двух местах поменял:
- Код: Выделить всё
If Res = 0 Then
If fFormat = FF_ARGB_BMP Or fFormat = FF_ARGB_PNG Or fFormat = FF_RGB_JPG Or fFormat = FF_ARGB_GIF Then
Res = GdipCreateBitmapFromScan0(Width, Height, Width * 4, PixelFormat32bppARGB, cBuf(0), Bmp)
Else
Stride = ((Width * 3 - 1) Or 3) + 1
ReDim ArRGB(Stride * Height - 1)
Bpp32to24 cBuf(0), ArRGB(0), Width, Height, Stride
Res = GdipCreateBitmapFromScan0(Width, Height, Stride, PixelFormat24bppRGB, ArRGB(0), Bmp)
End If
If Res = 0 Then
Select Case fFormat
Case FF_ARGB_GIF
sType = "{557CF402-1A04-11D3-9A73-0000F81EF32E}"
Case FF_ARGB_BMP, FF_RGB_BMP
sType = "{557CF400-1A04-11D3-9A73-0000F81EF32E}"
Case FF_ARGB_PNG, FF_RGB_PNG
sType = "{557CF406-1A04-11D3-9A73-0000F81EF32E}"
Case FF_RGB_JPG
sType = "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
tParams.count = 1
tParams.Parameter.NumberOfValues = 1
tParams.Parameter.type = 4
tParams.Parameter.value = VarPtr(JPGQuality)
CLSIDFromString StrPtr("{1D5BE4B5-FA4A-452D-9CDD-5DB35105E7EB}"), tParams.Parameter.GUID
End Select
Сохраняет как GIF, но там не прописан прозрачный цвет
видимо надо еще что-то добавить
спроси плиз у автора
Andrey Fedorov писал(а):не хочется привязываться к SR2D.dll только из-за этой операции. Можно ли прикрутить реализацию сохранения от The trick к IPicure?
Andrey Fedorov писал(а):Dest.a = Dest.a Or Src.a
Mikle писал(а):Andrey Fedorov писал(а):Dest.a = Dest.a Or Src.a
Но в целом функция получается не универсальной.
Andrey Fedorov писал(а):А как сделано в SR2D.dll?
iyy = 0;
for (yy = 0; yy < hd; yy++)
{
ixx = 0;
for (xx = 0; xx < wd; xx++)
{
b = g = r = a = 0;
iy = iyy;
for (y = 1; y <= cy; y++)
{
ix = ixx;
for (x = 1; x <= cx; x++)
{
cc = src[ikx[ix] + iky[iy] * ws];
b += (cc & 0xff) * kx[ix] * ky[iy];
g += ((cc & 0xff00) >> 8) * kx[ix] * ky[iy];
r += ((cc & 0xff0000) >> 16) * kx[ix] * ky[iy];
a += ((cc & 0xff000000) >> 24) * kx[ix] * ky[iy];
ix += 1;
}
iy += 1;
}
dest[xx + yy * wd] = b / cxy
+ (g / cxy << 8)
+ (r / cxy << 16)
+ (a / cxy << 24);
ixx += cx;
}
iyy += cy;
}
Вернуться в Раздел для Профессионалов
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8