簡體   English   中英

是否將位圖透明化為較小的圖像(以字節為單位)

[英]Does making a Bitmap Transparent a smaller image, as in bytes

當構建位圖並共同構建一些位圖並將它們組合為一個位圖時,它有助於.MakeTransparent()。

或者,如果我將Bitmap發送給請求的客戶端,如果我將其設為.MakeTransparent(),它將變小嗎? 不是寬度或高度,以字節為單位購買?

換句話說,.MakeTransparent()會優化位圖,如果沒有,那么在通過Internet通過網絡發送給請求的客戶端之前,沒有人會得到關於如何優化位圖的任何建議嗎?

有問題的代碼是sheet.MakeTransparent()

 internal static Task<Bitmap> GetDoorSecheduleSheetAsync(ShopDrawing.DoorSchedules schedules, RotateFlipType rotate, byte schedulesPerSheet, byte currentI)
{
    return Task.Run(() =>
        {
            var sheet = new Bitmap(DrawingOptions.PAGE_HEIGHT_SIZE, DrawingOptions.PAGE_WIDTH_SIZE);
            sheet.SetResolution(150, 150);
            byte scheduleCnt = 0;
            float prevWidth = 0;

            using (Graphics dc = Graphics.FromImage(sheet))
            {
               dc.Clear(Color.White);

                using (Pen pen = new Pen(Color.FromArgb(80, Color.Black), 4))
                {
                    for (; currentI < schedules.Count(); currentI++)
                    {
                        if (scheduleCnt > 0)
                        {
                            dc.DrawLine(pen, prevWidth, 380/*need constant for start height*/, prevWidth, sheet.Height);
                        };

                        using (var doorSchedule = schedules[currentI].Door)
                        {
                            dc.DrawImage(doorSchedule, prevWidth + 50, 380/*need constant for start height*/);
                            prevWidth += doorSchedule.Width + 50;
                            scheduleCnt++;
                        }

                        if (scheduleCnt == schedulesPerSheet)
                        {
                            sheet.RotateFlip(rotate);
                            sheet.MakeTransparent();
                            return sheet;
                        }
                    };
                };
            };
            sheet.MakeTransparent();
            sheet.RotateFlip(rotate);
            return sheet;
        });
}

謝謝!

BMP是未經壓縮的格式,每個像素本質上都是原始字節(或調色板索引)-除了更改每像素位數之外,沒有任何其他轉換會改變結果文件的大小。

不要通過網絡發送未壓縮的bmp,​​請使用無損PNG / GIF或JPG(如果適用於您)。

正如Alexei Levenkov所說,通過網絡發送原始BMP格式是最糟糕的 選擇

調用MakeTransparent()會(如果還不是這種情況)會將圖像格式轉換為32位(=使用alpha通道),這是大多數字節消耗的-透明性有其代價。

你應該將位圖保存為JPEG格式 ,即(如果你並不真的需要透明度 )或png (如果你真的需要它) -他們都更加高效

查看有關此問題的解答: 高質量圖像縮放庫
它顯示了如何使用.NET內置圖像編碼器

當您調用MakeTransparent方法時 ,位圖將轉換為Format32bppArgb格式,因為該格式支持alpha通道。

Format32bppArgb是一種每像素使用32位的格式。 每個8位用於alpha,紅色,綠色和藍色分量。 因此,這可能意味着尺寸改變。

但是,為了控制實際發生的情況,您可以壓縮位圖或通過將其轉換為PNG或JPG格式的其他格式來壓縮它,如Alexei Levenkov建議的那樣

在這里,您可以找到有關如何將PNG轉換為BMP的示例,可以使用相同的代碼但交換格式

如何在運行時將PNG轉換為BMP?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM