1
이미지 형식 bpm을 pcx로 변환하는 데 사용되는 방법이나 dll이 있습니까?bmp 파일을 pcx 파일로 변환하는 방법
나는 코드를 따르려고 노력해 왔습니다.
public static void ConvertBMP2PCX(string bmpFilePath)
{
List<byte> listBytePCX = new List<byte>();
Bitmap bmp = new Bitmap(bmpFilePath);
int bmpWidth = bmp.Width;
int bmpHeight = bmp.Height;
byte[] byteBmp;
using (MemoryStream ms = new MemoryStream())
{
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byteBmp = ms.ToArray();
ms.Close();
}
int bytesPerLine = (bmpWidth + 7)/8;
int xEnd = bmpWidth - 1;
int yEnd = bmpHeight - 1;
byte[] header ={
0x0A, // "PCX File"
0x05, // "Version 5"
0x01, // RLE Encoding
0x01, // 1 bit per pixel
0x00, 0x00, // XStart at 0
0x00, 0x00, // YStart at 0
(byte)(xEnd&0xFF), (byte)((xEnd>>8) & 0xFF), // Xend
(byte)(yEnd&0xFF), (byte)((yEnd>>8) & 0xFF), // Yend
(byte)(xEnd&0xFF), (byte)((xEnd>>8) & 0xFF), // Xend
(byte)(yEnd&0xFF), (byte)((yEnd>>8) & 0xFF), // Yend
0x0F, 0x0F, 0x0F, 0x0E, 0x0E, 0x0E, 0x0D, 0x0D, 0x0D, 0x0C, 0x0C, 0x0C, //48-byte EGA palette info
0x0B, 0x0B, 0x0B, 0x0A, 0x0A, 0x0A, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08,
0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04,
0x03, 0x03, 0x03, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, // Reserved byte, always x00
0x01, // 1 bit plane
(byte)(bytesPerLine&0xFF), (byte)((bytesPerLine>>8) & 0xFF), // Bytes per scan line: (XEnd - XStart, 1)/8
0x01, 0x00, // Palette type: 1 means color or monochrome
0x00, 0x00, // Horizontal screen size (not used)
0x00, 0x00 // Vertical screen size (not used)
};
listBytePCX.AddRange(header); // Write most of header data
listBytePCX.AddRange(new byte[54]);// pad the 128-byte header
byte[] rowIn = new byte[bmpWidth * 3];
int[] bits = { 128, 64, 32, 16, 8, 4, 2, 1 };
byte[] bytes = new byte[2];
int last = 0;
int count = 0;
for (int y = 0; y < bmpHeight; y++)
{
//getPixelRow(rowIn, y);
int currentByteCount = (y + 1) * bytesPerLine;
if (currentByteCount > byteBmp.Length)
{
currentByteCount = byteBmp.Length;
rowIn = new byte[bmpWidth * 3];
}
for (int i = y * bytesPerLine; i < currentByteCount; i++)
{
rowIn[count] = byteBmp[i];
}
count = 0;
for (int x = 0; x < bmpWidth; x += 8)
{
int n = x + 8;
if (n > bmpWidth) n = bmpWidth;
int b = 0;
for (int j = x; j < n; j++)
if (rowIn[j + j + j] != 0)
b |= bits[j - x];
if (last == b && count < 63)
count++;
else
{
if (count > 0)
{
bytes[0] = (byte)(count | 0xC0);
bytes[1] = (byte)last;
listBytePCX.Add(bytes[0]);
listBytePCX.Add(bytes[1]);
}
last = b;
count = 1;
}
}
if (count > 0)
{
bytes[0] = (byte)(count | 0xC0);
bytes[1] = (byte)last;
listBytePCX.Add(bytes[0]);
listBytePCX.Add(bytes[1]);
count = 0;
last = 0;
}
}
//Save pcx file
string pcxFilePath = bmpFilePath.Substring(0, bmpFilePath.LastIndexOf('.') + 1) + "1";
using (FileStream fs = new FileStream(pcxFilePath, FileMode.Create, FileAccess.Write))
{
fs.Write(listBytePCX.ToArray(), 0, listBytePCX.Count);
fs.Flush();
fs.Close();
}
}
하지만 작동하지 않으며 pcx 형식의가는 선만 만듭니다.
라이브러리는 아주 잘 작동합니다. 고마워요! –
기꺼이 도와 드리겠습니다. "대답"을 받아 들일 자유를 느껴보십시오 :) ... – MartinStettner
@AndyFong 제발 내가 pcx 파일로 bmp 파일을 변환하는 코드를 제공 할 수 있습니다 .. 나는 C#을 사용하여 Windows 응용 프로그램을 개발 중입니다 .. 어떤 아이디어 !! 미리 감사드립니다. –