Hej. Jag har x antal BMP bilder som är 8 Bitar. Jag skulle vilja via programkod ändra på Bitantalet tiil 1 Bit. Är detta möjligt? <info> Hej Sven. >Om det har betydelse så är BMP bilderna svartvita... Om bilderna är svartvita så bör väl 1 bit räcka, 0 = vitt, 1 = svart. finns en massa api:er i vb6 för bitmap/dib-behandling, vet dock inte var motsvarigheten är i vb.NET Visst kan du klara dig med 1 bit (svart eller vit pixel) för att representera en svartvit bild men kvalitén kommer att bli lidande. 8 bitar känns som ett minimum om du vill ha någorlunda bra kvalitet på bilden. 8 Bit --> 1 Bit
Man kan ju läsa in en Bitmap genom följande kod:
<code>
Dim l As System.Drawing.Bitmap
Dim img As System.Drawing.Image
img = l.FromFile("123.bmp")
</code>
Nu skulle jag vilja spara över filen 123.bmp så att den blir 1Bit.
Förslag?
h. PhilipSv: 8 Bit --> 1 Bit
Tror inte du begriper,vad du egentligen vill 8 bit och 1 bit har ingen relevans här.
</info>Sv: 8 Bit --> 1 Bit
Kan mycket väl hända att jag inte begriper... Det jag vill påverka är alltså "Bit depth", eller med andra ord bitar/pixel. Saken är den att jag kan göra detta med hjälp av photoshop men skulle vilja kunna göra det via programkod. Om det har betydelse så är BMP bilderna svartvita...
PhilipSv: 8 Bit --> 1 Bit
För att då kunna beskriva varje pixel i gråskala behöver du 8 bitar dvs 1 Byte.
Skall du beskriva bilden i färg behöver du min 24 bitar 3 Byte.Sv: 8 Bit --> 1 Bit
Har dock ingen aning om hur man gör.
ThomasSv: 8 Bit --> 1 Bit
Sv: 8 Bit --> 1 Bit
Hur man gör? Well det beror ju lite på bildformatet samt vilket färgdjup och palett den har, men låt oss anta det enklaste exemplet; ett ickekomprimerat format med 8 bitars färgdjup (dvs 256 gråskalor). Ett sätt är ju då att loopa igenom varje pixel och om färgen på den byten är <=127 så ger det en nolla och om >=128 så ger det en etta. Det är ju dock uppenbart att man förlorar information (=kvalitet) på detta sätt, därav rekommendationen att jobba med åtminstonde en 256-gråskala.
För att lagra en bild med 1 bits djup optimalt så måste du ju "komprimera" bilden så att 8 pixlar ryms i varje byte. Detta får effekten att bildens dimensioner bör vara jämnt delbart med 8 om du inte ska få en svart eller vit kant.
Slutligen finns det ju tillfällen där man inte har möjligheten att använda gråskalor, t ex med en matrisskrivare. Ibland kan man då fejka gråskalor genom att använda en högre upplösning och sedan låta olika mönster av svart och vitt representera olika gråskalor beroende på hur ögat uppfattar det hela. Det fungerar ju dock inte i alla lägen, eftersom man kanske inte alltid kan öka upplösningen.