투명 이미지 (주로 GIF)의 크기를 조정하는 비밀 수식이 있습니까 없이 모든 품질 손실 - 그 어느 때까지?C#을 사용하여 투명 이미지 크기 조정
나는 많은 것을 시도해 보았다. 가장 가까운 것은 충분하지 않다.
내 주요 이미지를 살펴 보자
http://www.thewallcompany.dk/test/main.gif
그리고 스케일 이미지 :
http://www.thewallcompany.dk/test/ScaledImage.gif
//Internal resize for indexed colored images
void IndexedRezise(int xSize, int ySize)
{
BitmapData sourceData;
BitmapData targetData;
AdjustSizes(ref xSize, ref ySize);
scaledBitmap = new Bitmap(xSize, ySize, bitmap.PixelFormat);
scaledBitmap.Palette = bitmap.Palette;
sourceData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, bitmap.PixelFormat);
try
{
targetData = scaledBitmap.LockBits(new Rectangle(0, 0, xSize, ySize),
ImageLockMode.WriteOnly, scaledBitmap.PixelFormat);
try
{
xFactor = (Double)bitmap.Width/(Double)scaledBitmap.Width;
yFactor = (Double)bitmap.Height/(Double)scaledBitmap.Height;
sourceStride = sourceData.Stride;
sourceScan0 = sourceData.Scan0;
int targetStride = targetData.Stride;
System.IntPtr targetScan0 = targetData.Scan0;
unsafe
{
byte* p = (byte*)(void*)targetScan0;
int nOffset = targetStride - scaledBitmap.Width;
int nWidth = scaledBitmap.Width;
for (int y = 0; y < scaledBitmap.Height; ++y)
{
for (int x = 0; x < nWidth; ++x)
{
p[0] = GetSourceByteAt(x, y);
++p;
}
p += nOffset;
}
}
}
finally
{
scaledBitmap.UnlockBits(targetData);
}
}
finally
{
bitmap.UnlockBits(sourceData);
}
}
나는이 작업을 수행하려면 위의 코드를 사용하고 있습니다를 인덱싱 된 크기 조정.
누구에게 개선 아이디어가 있습니까?
GDI의 끔찍한 GIF 지원을 수정하는 라이브러리를 사용하는 것이 좋습니다. 내 것과 같이, http://imageresizing.net 약 4 년 동안 있었고 잘 유지되고 지원됩니다. –